最最基础
的广度搜索题目。
我的思路是在输入数据以后,对应创建一个color数组保存颜色,在外面围上一圈0的颜色,然后开始用search函数从[0][0]开始搜索,每次搜索都标记颜色为1,最后输出时,只需要用if判断这个数对应的颜色是否为0,并且这个数本身不为1,如果为真,那么输出2,如果为假,那么输出本身。
#include<iostream>
using namespace std;
using namespace std;
int n;
int square[32][32], color[32][32];
int square[32][32], color[32][32];
void search(int x, int y) {
color[x][y]=1;
if((x+1>=0) && (x+1<=n+1) && (square[x+1][y]==0) && (color[x+1][y]==0)) search(x+1,y);
if((x-1>=0) && (x-1<=n+1) && (square[x-1][y]==0) && (color[x-1][y]==0)) search(x-1,y);
if((y+1>=0) && (y+1<=n+1) && (square[x][y+1]==0) && (color[x][y+1]==0)) search(x,y+1);
if((y-1>=0) && (y-1<=n+1) && (square[x][y-1]==0) && (color[x][y-1]==0)) search(x,y-1);
return;
}
color[x][y]=1;
if((x+1>=0) && (x+1<=n+1) && (square[x+1][y]==0) && (color[x+1][y]==0)) search(x+1,y);
if((x-1>=0) && (x-1<=n+1) && (square[x-1][y]==0) && (color[x-1][y]==0)) search(x-1,y);
if((y+1>=0) && (y+1<=n+1) && (square[x][y+1]==0) && (color[x][y+1]==0)) search(x,y+1);
if((y-1>=0) && (y-1<=n+1) && (square[x][y-1]==0) && (color[x][y-1]==0)) search(x,y-1);
return;
}
int main() {
cin >> n;
for(int i=0; i<=n+1; i++) {
for(int j=0; j<=n+1; j++) {
square[i][j]=0;
color[i][j]=0;
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
cin >> square[i][j];
}
}
//输入数据
search(0,0);
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if((square[i][j]==0) && (color[i][j]==0)) {
cout << "2";
}else {
cout << square[i][j];
}
if(j<n) cout << " ";
}
cout << endl;
}
return 0;
}
cin >> n;
for(int i=0; i<=n+1; i++) {
for(int j=0; j<=n+1; j++) {
square[i][j]=0;
color[i][j]=0;
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
cin >> square[i][j];
}
}
//输入数据
search(0,0);
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if((square[i][j]==0) && (color[i][j]==0)) {
cout << "2";
}else {
cout << square[i][j];
}
if(j<n) cout << " ";
}
cout << endl;
}
return 0;
}