P1162 填涂颜色
# 填涂颜色
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
```
```plain
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
```
## 样例 #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
```
解题思路:扫外面零变成3,最后在遍历
#include<iostream>
using namespace std;
const int N = 30;
int g[N][N], n;
bool vis[N][N];
void dfs(int x, int y)
{if (x >= 0 && y >= 0 && x <= n+1&& y <= n+1){if (g[x][y] == 1 || g[x][y] == 3){return;}else{g[x][y] = 3;dfs(x + 1, y);dfs(x - 1, y);dfs(x, y + 1);dfs(x, y - 1);}}
}
int main()
{cin >> n;for (int i = 1; i<=n; i++){for (int j = 1; j<=n; j++){cin >> g[i][j];}}dfs(0, 0);for (int i = 1; i<=n; i++) {for (int j = 1; j<=n; j++){if (g[i][j] == 3){g[i][j] = 0;}else if (g[i][j] == 0){g[i][j] = 2;}}}for (int i = 1; i<=n; i++) {for (int j = 1;j<=n; j++){cout << g[i][j] << " ";}cout << endl;}return 0;
}