点击查看测评结果 上代码:
# include<bits/stdc++.h>
using namespace std;
int ar[33][33];
int n;
struct point {
int x, y;
};
const int xj[4] = {-1, 1, 0, 0};
const int yj[4] = {0, 0, -1, 1};
int bfs(int x, int y) {
point S;
S.x=x;
S.y=y;
if (ar[x][y] != 0)return 0;
point pts[24111];
int ptsi = 0;
pts[ptsi] = S;
ptsi++;
ar[S.x][S.y] = -1;
int flag = 1, cnt = 0;
while (flag) {
flag = 0;
vector<point> newp;
for (int i = 0; i < ptsi; i++) {
for (int j = 0; j < 4; j++) {
point wz = pts[i];
wz.x += xj[j];
wz.y += yj[j];
if (wz.x >= 0 && wz.x < x && wz.y >= 0 && wz.y < y && ar[wz.x][wz.y] == 0) {
flag = 1;
newp.push_back(wz);
ar[wz.x][wz.y] = -1;
}
}
}
ptsi = 0;
for (int i = 0; i < newp.size(); i++) {
pts[ptsi] = newp[i];
ptsi++;
}
}
return 0;
}
int main() {
cin >> n;
char st[1001][1001];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> st[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ar[j][i] = st[i][j] - '0';
}
}
// cout << " ";
// for (int i = 0; i < n; i++) {
// cout << "__";
// }
// cout << endl;
// for (int i = 0; i < n; i++) {
// cout << "|";
// for (int j = 0; j < n; j++) {
//
// cout << (ar[j][i] ? "█ " : " ");
// }
// cout << "|\n";
// }
// cout << " ";
// for (int i = 0; i < n; i++) {
// cout << " ̄";
// }
for (int i = 0; i < n; i++) {
bfs(0, i);
}
for (int i = 1; i < n - 1; i++) {
bfs(i, n - 1);
}
for (int i = n - 1; i >= 0; i--) {
bfs(n - 1, i);
}
for (int i = n - 2; i > 0; i--) {
bfs(i, 0);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (ar[j][i] == -1)cout << 0;
else if (ar[j][i] == 0)cout << 2;
else if (ar[j][i] == 1)cout << 1;
}
cout << endl;
}
return 0;
}
注:用的是广搜。 能帮帮忙吗?