填涂颜色
题目描述
由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如:6 × 6的方阵(n=6),涂色前和涂色后的方阵如下:
如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0 在闭合圈内。闭合圈不一定是环形的,可以是任意形状,但保证闭合圈内的 0 是连通的(两两之间可以相互到达)。
0 0 0 0 0 0
0 0 0 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 1 0 1
1 1 1 1 1 1
```
0 0 0 0 0 0
0 0 0 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 1 2 1
1 1 1 1 1 1
```
输入格式
每组测试数据第一行一个整数 n(1 ≤ n ≤ 30)。
接下来 n 行,由 0 和 1 组成的 n × n 的方阵。
方阵内只有一个闭合圈,圈内至少有一个 0。
输出格式
已经填好数字 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 ≤ n ≤ 30。
做题过程
思路
本题是dfs,可以将原本是1的数变成-1,利用dfs将圈外0变成1,圈内0变2
第一部分
头文件+定义
a数组为输入的一组输
b数组则是辅助判断输出的数组
dfs函数,用来深搜,如果超出边界或当前位置不等于0就回溯
否则将当前位置标记为1,并且进行下一步深搜
第二部分
第一个for循环用来输入,把输入的1,存到b数组里变成-1
第2,3个for循环用来dfs,将不再圈里的0都改为1
最后一个for循环用来输出
如果b数组里为-1,那么输出1
如果a数组里是0,那么输出2,否则就是0