填涂颜色

将数据循环输入,存储在二维数组a中,再用数组b存储当前状态;

然后从(0,0)开始广搜,当遇到1或者到达数组的边界时返回,否则标记此位置(变为1)

然后递归,直到圈外都被标记过

此时除了圈内(要输出2的位置)外,全为1;

最后输出:

若此点为1则输出b数组的状态;

否则输出2;

代码:

#include<bits/stdc++.h>
using namespace std;
int a[40][40],b[40][40],n;
int dx[5]={0,-1,1,0,0};
int dy[5]={0,0,0,-1,1};
void dfs(int p,int q)
{
if(p<0||p>n+1||q<0||q>n+1||b[p][q]!=0) return;
b[p][q]=1;
for(int i=1;i<=4;i++)
dfs(p+dx[i],q+dy[i]);
}
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) b[i][j]=0;
else b[i][j]=1;
}
dfs(0,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i][j]==0) cout<<"2"<<" ";
else
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}

posted @ 2022-08-25 07:52  nnd昵称被使用?  阅读(16)  评论(0编辑  收藏  举报