1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <bits/stdc++.h> using namespace std; const int LEN = 120; string str = "yizhong"; int N, walk[8][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}, {1, 1}, {-1, 1}, {1, -1}, {-1, -1}}; char arr[LEN][LEN], ans[LEN][LEN];
bool valid(int x, int y) { return (x >= 1 && x <= N && y >= 1 && y <= N); }
void dfs(int ux, int uy) { for (int i = 0; i < 8; ++i) { int diff_x = walk[i][0], diff_y = walk[i][1]; int x = ux, y = uy, j = 1; while (j < 7 && valid(x += diff_x, y += diff_y) && str[j] == arr[x][y]) ++j; if (j < 7) continue; for (j = 0, x = ux, y = uy; j < 7; ++j, x += diff_x, y += diff_y) ans[x][y] = arr[x][y]; } }
int main() { cin >> N; for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) { cin >> arr[i][j]; ans[i][j] = '*'; } } for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) { if (arr[i][j] == 'y') dfs(i, j); } } for (int i = 1; i <= N; ++i, cout << endl) { for (int j = 1; j <= N; ++j) { cout << ans[i][j]; } } return 0; }
|