课后作业-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

**思路:**dpxy代表从(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;
}
相关推荐
不想写代码的星星几秒前
std::move 根本不移动,就像老婆饼里没有老婆
c++
redaijufeng5 分钟前
C++雾中风景7:闭包
c++·算法·风景
Chen_harmony16 分钟前
一、数据结构概念和复杂度计算
数据结构
小欣加油35 分钟前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
思麟呀44 分钟前
C++11 核心特性(三):强类型枚举、static_assert 与 std::tuple
开发语言·c++
一拳一个呆瓜1 小时前
【STL】C++程序的启动与终止
c++·stl
尽兴-1 小时前
2.1 向量基础:Embedding、余弦相似度、欧氏距离、向量检索
算法·embedding·欧氏距离·向量检索·余弦相似度
凡人叶枫1 小时前
Effective C++ 条款07:为多态基类声明 virtual 析构函数
linux·c语言·开发语言·c++
Black蜡笔小新1 小时前
自动化AI算法训练服务器DLTM训推一体工作站赋能多行业智能化升级
人工智能·算法·自动化
凡人叶枫1 小时前
Effective C++ 条款10:令 operator= 返回一个 reference to *this
java·linux·服务器·开发语言·c++·effective c++