1162 填涂颜色
很简单的一个广搜题,就像模板一样
#include<bits/stdc++.h>
using namespace std;
int ap[35][35],v[35][35],n;
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
struct node{
int x,y;
}t,u;
int i,j;
void bfs(int,int);
int main()
{
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>ap[i][j];
for(i=1;i<=n;i++)
{
if(ap[1][i]==0&&v[1][i]==0)bfs(1,i);
if(ap[i][1]==0&&v[i][1]==0)bfs(i,1);
if(ap[n][i]==0&&v[n][i]==0)bfs(n,i);
if(ap[i][n]==0&&v[i][n]==0)bfs(i,n);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(ap[i][j]==0&&v[i][j]==0)
cout<<2<<" ";
else cout<<ap[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
void bfs(int x,int y)
{
v[x][y]=1;
queue<node> q;
t.x=x;
t.y=y;
q.push(t);
while(1)
{
if(q.empty()) break;
u=q.front();
q.pop();
for(i=0;i<=3;i++)
{
if(u.x+dx[i]<=n&&u.y+dy[i]<=n&&u.x+dx[i]>=1&&u.y+dy[i]>=1&&v[u.x+dx[i]][u.y+dy[i]]==0&&ap[u.x+dx[i]][u.y+dy[i]]==0)
{
t.x=u.x+dx[i];
t.y=u.y+dy[i];
v[t.x][t.y]=1;//标记为不合格
q.push(t);//*/*/*/*/*/*/
}
}
}
}