填涂颜色
题目描述
由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6×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≤n≤30)
接下来n行,由0和1组成的n×n的方阵。
方阵内只有一个闭合圈,圈内至少有一个0。
输出格式
已经填好数字2的完整方阵。
输入输出样例
输入 #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
说明/提示
1≤n≤30
源自洛谷P1162
思路
染色法
图中数字可分为三部分:圈外的0、圈上的1、圈内的0,找到所有圈外的0并染色成比1大的数字,然后把圈外的数字染色成0,圈内的0染色成2即可得到所需的图。
1、直接从左上角dfs暴力搜索每一个圈外的0,每搜索到一个就染色成大于1的数字。注:设置边界条件防止越界。
2、递归return的条件:碰到圈和已搜索过的数字。
3、把圈外的数字染色成0,圈内的0染色成2,之后输出。
代码
#include<stdio.h>
int n,N[32][32];
void dfs(int x,int y)//dfs模块