代码如下:
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> vec_int32_t;
void print_color(vector<vec_int32_t>& vec, int i, int j, int old_num, int new_num){
int n = vec.size(), m = vec.at(0).size();
if (vec[i][j] != old_num) return ;
vec[i][j] = new_num;
if (i - 1 >= 0 && vec[i - 1][j] == old_num) print_color(vec, i - 1, j, old_num, new_num);
if (i + 1 < n && vec[i + 1][j] == old_num) print_color(vec, i + 1, j, old_num, new_num);
if (j - 1 >= 0 && vec[i][j - 1] == old_num) print_color(vec, i, j - 1, old_num, new_num);
if (j + 1 < m && vec[i][j + 1] == old_num) print_color(vec, i, j + 1, old_num, new_num);
return ;
}
int main(){
int n;
cin >> n;
vector<vec_int32_t> vec(n, vec_int32_t(n));
for (auto& i : vec)
for (int& j : i) cin >> j;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
if (vec[i][j] == 0 &&
((i == 0 || i == n - 1) ||
(j == 0 || j == n - 1))){
print_color(vec, i, j, 0, -1);
}else if (vec[i][j] == 0)
print_color(vec, i, j, 0, 2);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
if (vec[i][j] == -1) print_color(vec, i, j, -1, 0);
for (auto& i : vec){
for (int& j : i) cout << j << " ";
cout << endl;
}
return 0;
}