32分求求了
  • 板块题目总版
  • 楼主czx2021
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/26 17:48
  • 上次更新2024/8/26 20:33:19
查看原帖
32分求求了
565698
czx2021楼主2024/8/26 17:48
#include<bits/stdc++.h>
using namespace std;
int a[40][40],n;
bool vis[40][40];
queue<int>qx;
queue<int>qy;
const int d[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
bool bfs(int x,int y)
{
	vis[x][y]=1;
	qx.push(x);
	qy.push(y);
	while(!qx.empty()&&!qy.empty())
	{
		int x=qx.front(),y=qy.front();
		if(y==n||x==n||x==1||y==1)return true;//不在闭合圈 
		qx.pop();
		qy.pop();
		for(int i=0;i<4;i++)
		{
			int x1=x+d[i][0],y1=y+d[i][1];
			if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&vis[x1][y1]==0&&a[x1][y1]==0)
			{
				vis[x1][y1]=1;
				qx.push(x1);
				qy.push(y1);
			}
		}
	}
	return false;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			if(a[i][j]==1)vis[i][j]=1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==0&&bfs(i,j)==0)
			{
				a[i][j]=2;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
		     cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
 } 
2024/8/26 17:48
加载中...