课后作业-2025年11月23号作业

**题目:**P1162 填涂颜色

网址: https://www.luogu.com.cn/problem/P1162

**思路:**从(0,0)这个点开始访问,这么被1包围的0是访问不到的。

**知识点:**dfs

代码:

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int maxn=2e5+100;
int n,m;
int a[50][50]; 
bool vis[50][50];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1}; 
void dfs(int x,int y)
{
	vis[x][y]=true;
	for(int i=0;i<=3;i++)
	{
		int xx=x+dx[i],yy=y+dy[i];
		if(xx>=0&&x<=n+1&&yy>=0&&yy<=n+1&&!vis[xx][yy]&&a[xx][yy]==0)
		{
			dfs(xx,yy);
		}
	}
} 
int main(){
	
	cin>>n; 
	for(int i=1;i<=n;i++)
	{
	  for(int j=1;j<=n;j++)
	  {
	     cin>>a[i][j];	
	  }	
	} 
	dfs(0,0);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==0&&!vis[i][j])
			cout<<2<<" ";
			else cout<<a[i][j]<<" ";
		}
		cout<<'\n';
	}
	return 0;
}

**题目:**P1746 离开中山路

网址: https://www.luogu.com.cn/problem/P1746

**思路:**dp[x][y]代表从(sx,sy)开始走到达(x,y)的最小步数。

**知识点:**bfs

代码:

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int maxn=1e3+100;
int n,m;
string a[maxn];
int dp[maxn][maxn];
bool vis[maxn][maxn];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1}; 
int sx,sy,tx,ty;
struct node{
	int x,y,co;
}; 
int main(){
	
	cin>>n;
	for(int i=0;i<n;i++) 
	{
		cin>>a[i];
	}
	cin>>sx>>sy>>tx>>ty;
	sx--;sy--;
	tx--;ty--; 
	queue<node>q;
	q.push({sx,sy,0});
	vis[sx][sy]=1;
	while(q.size())
	{
		node qr =q.front();
		q.pop();
		int x=qr.x,y=qr.y,co=qr.co;
		dp[x][y]=co;
		for(int i=0;i<=3;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx>=0&&xx<n&&yy>=0&&yy<n&&a[xx][yy]=='0')
			{
				if(!vis[xx][yy])
				{
					vis[xx][yy]=1; 
					q.push({xx,yy,co+1});
				}
			}
		}
	}
	cout<<dp[tx][ty];
	return 0;
}

**题目:**P1700 [USACO19OPEN] Milk Factory B

网址: https://www.luogu.com.cn/problem/P1700

**思路:**从1到n开始枚举,判断反向建边之后从i这个点开始是否能够到达n个点。

**知识点:**dfs,反向建边

代码:

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long
#define eb emplace_back
using namespace std;
const int maxn=1e2+100;
int n,m;
vector<int>vt[maxn];  
int cnt;
void dfs(int x)
{
	cnt++;
	for(auto it:vt[x])
	{
		dfs(it);
	}
}
int main(){
	
	cin>>n;
	for(int i=1;i<=n-1;i++)
	{
	  int x,y;
	  cin>>x>>y;
	  vt[y].eb(x);	
	} 
	for(int i=1;i<=n;i++)
	{
		cnt=0;
		dfs(i);
		if(cnt==n)
		{
			cout<<i;
			return 0;
		}
	}
	cout<<-1;
	return 0;
}
相关推荐
LYFlied11 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
阿里巴巴AI编程社区11 小时前
Qoder 提效实战:数据开发工程师用 Qoder 提效50%
数据结构
踏浪无痕11 小时前
计算机算钱为什么会算错?怎么解决?
后端·算法·面试
消失的旧时光-194311 小时前
从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透
android·数据结构·链表
夏乌_Wx11 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法
lzh2004091911 小时前
二叉搜索树与双向链表
数据结构·链表
studytosky12 小时前
深度学习理论与实战:反向传播、参数初始化与优化算法全解析
人工智能·python·深度学习·算法·分类·matplotlib
WolfGang00732112 小时前
代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II
数据结构·c++·算法
努力学算法的蒟蒻12 小时前
day35(12.16)——leetcode面试经典150
算法·leetcode·面试
cccc来财12 小时前
角点检测算法:Harris 和 FAST 方法
算法·计算机视觉·特征提取