P1162 填涂颜色

填涂颜色

题目描述

由数字 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

完整代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值