课后作业-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 小时前
Rust 练习册 80:Grains与位运算
大数据·算法·rust
dlz08361 小时前
从架构到数据结构,到同步逻辑,到 show run 流程优化
数据结构
带鱼吃猫1 小时前
Linux系统:策略模式实现自定义日志功能
linux·c++
jllws12 小时前
数据结构_字符和汉字的编码与查找
数据结构
zzzsde2 小时前
【C++】C++11(1):右值引用和移动语义
开发语言·c++·算法
学困昇2 小时前
C++11中的包装器
开发语言·数据结构·c++·c++11
雪域迷影3 小时前
C++中编写UT单元测试用例时如何mock非虚函数?
开发语言·c++·测试用例·gmock·cpp-stub开源项目
sheeta19985 小时前
LeetCode 每日一题笔记 日期:2025.11.24 题目:1018. 可被5整除的二进制前缀
笔记·算法·leetcode