课后作业-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;
}
相关推荐
!停1 小时前
C语言栈和队列的实现
开发语言·数据结构
hweiyu001 小时前
强连通分量算法:Kosaraju算法
算法·深度优先
源代码•宸1 小时前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
郝学胜-神的一滴1 小时前
Linux系统编程:深入理解读写锁的原理与应用
linux·服务器·开发语言·c++·程序人生
Larry_Yanan1 小时前
Qt多进程(十一)Linux下socket通信
linux·开发语言·c++·qt
mit6.8242 小时前
逆向思维|memo
算法
蓝桉~MLGT2 小时前
中级软考(软件工程师)第三章知识点——数据结构与数据运算
数据结构
机器学习之心2 小时前
MATLAB灰狼优化算法(GWO)改进物理信息神经网络(PINN)光伏功率预测
神经网络·算法·matlab·物理信息神经网络
代码游侠2 小时前
学习笔记——ESP8266 WiFi模块
服务器·c语言·开发语言·数据结构·算法
倦王2 小时前
力扣日刷26110
算法·leetcode·职场和发展