填涂颜色
题目描述
由数字 $0$ 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 $1$ 构成,围圈时只走上下左右 $4$ 个方向。现要求把闭合圈内的所有空间都填写成 $2$。例如:$6\times 6$ 的方阵($n=6$),涂色前和涂色后的方阵如下:
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
输入格式
每组测试数据第一行一个整数 $n(1 \le n \le 30)$。
接下来 $n$ 行,由 $0$ 和 $1$ 组成的 $n \times n$ 的方阵。
方阵内只有一个闭合圈,圈内至少有一个 $0$。
//感谢黄小U饮品指出本题数据和数据格式不一样. 已修改(输入格式)
输出格式
已经填好数字 $2$ 的完整方阵。
样例 #1
样例输入 #1
6
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
样例输出 #1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
提示
对于 $100\%$ 的数据,$1 \le n \le 30$。
各位
好长时间没上线了哈
。。。。
这道题
深搜
hh
#include<iostream>
using namespace std;
int a[35][35],n;
int dx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
oid dfc(int x,int y)
{
a[x][y]=0;
for(int i=0;i<4;i++)
{
int ux = x+dx[i][0],uy = y+dx[i][1];
if(ux>=0 and ux<=n+1 and uy>=0 and uy<=n+1 and a[ux][uy]==2)
{
dfc(ux,uy);
}
}
}
int main()
{
for(int i=0;i<35;i++)
{
for(int j=0;j<35;j++)
a[i][j]=2;
}
}
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++
int tmd;cin>>tmd
if(tmd==1)
a[i][j]=1;
}
}
}
dfc(0,0);
for(int i=1;i<=n;i++
{
for(int j=1;j<=n;j++)
{
cout<<a[i][j]<<" ";
}
if(i!=n)
{
cout<<endl;
}
}
return 0;
}