一. 题目:
由数字 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 个方向。现要求把闭合圈内的所有空间都填写成 2。
例如 6×6 的方阵(6n=6),涂色前和涂色后的方阵如下:
二. 分析
这道题很容易就想到 利用dfs 来进行求解 首先main 函数中进行输入 并用一个二维数组 存储下来 这样在dfs函数中 只需要对上下左右的数进行搜索
将1以外的数变为3 这样在一里面的数便是唯一的0 因此进行输出或者再次更改便可
三. 代码实现
#include <bits/stdc++.h>
using namespace std;
const int N=100;
int n;
int a[N][N];
void dfs(int x,int y) {
if (x >= 0 && x <= n + 1 && y >= 0 && y <= n + 1) {
if (a[x][y] == 1 || a[x][y] == 3) return ;
else {
a[x][y] = 3;
dfs(x + 1, y);
dfs(x - 1, y);
dfs(x, y + 1);
dfs(x, y - 1);
}
}
}
int main()
{
scanf("%d",&n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
dfs(0,0);
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= n; ++j) {
if (a[i][j] == 3)
printf("%d ", 0);
else if (a[i][j] == 0) printf("%d ", 2);
else printf("%d ", 1);
}
printf("\n");
}
return 0;
}
行了看明白了自己写写试试吧