课后作业-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;
}
相关推荐
大江东去浪淘尽千古风流人物15 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
rainbow688939 分钟前
Linux文件描述符与重定向原理
c++
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
努力学算法的蒟蒻1 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495641 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CodeSheep程序羊1 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_841495641 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归