望大佬求助!
查看原帖
望大佬求助!
773386
Error303楼主2023/2/20 23:21

先说一下我的思路:先把所有的0赋值成2,再把边界上的2赋回0,再从边界开始广搜。 但是他没进行搜索啊啊啊 还有因为敲这行代码的时间过于久远,我忘了结构体相关语言QwQ

#include<iostream>
#include<queue>
using namespace std;
int n,a[35][35],b[35][35];
int nxt[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
struct node{
	int x,y;
}m,p;
queue<node>q;
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]==0)
			{
				a[i][j]=2;
				if(i==1||j==1||i==n||j==n)
					a[i][j]=0;
			}
		}
	 for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==0)
			{
				p.x=i;
				p.y=j;
				q.push(p);
				b[i][j]=1;
				while(!q.empty())
				{
					m=q.front();
					q.pop();
					int tx,ty;
					for(int k=0;k<4;k++)
					{
						tx=m.x+nxt[i][0];
						ty=m.y+nxt[i][1];
						if(tx>n||tx<1||ty>n||ty<1||b[tx][ty]==1||a[tx][ty]==1)
							continue;
						b[tx][ty]=1;
						a[tx][ty]=0;
						p.x=tx;
						p.y=ty;
						q.push(p);
					}
				}
			}
		}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}
2023/2/20 23:21
加载中...