#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
//表示八个方向(方向数组)
int dx[] = {0, 1, 1, 1, 0, -1, -1, -1};
int dy[] = {1, 1, 0, -1, -1, -1, 0, 1};
//比较
char cmp[8] = "yizhong"; 
//一个原数组,一个标记数组
char A[110][110], ans[110][110];
//矩阵大小
int  n;

void dfs(int x,int y) {
	for(int i = 0;i < 8;i++) {  //枚举8个方向 
		int flag = 1;
		for(int j = 1;j <= 6;j++) { //以1个方向比较 “izhong”   
			int nx = x + j*dx[i];    //x,y是‘y’字符的坐标
			int ny = y + j*dy[i];    //往后数6个格子
			if(nx < 1 || nx > n || ny < 1 || ny > n) { //判越界 
				flag = 0;
				break;
			}
			if(cmp[j] != A[nx][ny]) {  //判断第j位是否符合 
				flag = 0;
				break;
			}
		}
		if(flag == 0) continue;
		for(int j = 0;j <= 6;j++) { //符合就记录在ans数组里 
			int nx = x + j*dx[i];
			int ny = y + j*dy[i];
			ans[nx][ny] = A[nx][ny]; //把单独的”yizhong“记录在ans数组中
		}
	}

}

int main() {
	cin >> n;
	for(int i = 1;i <= n;i++) {
		for(int j = 1;j <= n;j++) {
			cin >> A[i][j]; //A数组-原数组
		}
	}

	for(int i = 1;i <= n;i++) { 
		for(int j = 1;j <= n;j++) {
			if(A[i][j] == 'y') dfs(i,j);//如果发现有y就开始搜索 
		}
	}

	for(int i = 1;i <= n;i++) { //输出 
		for(int j = 1;j <= n;j++) {
			if(ans[i][j] == 0) ans[i][j] = '*';//如果没有改动就输出* 
			cout << ans[i][j];
		}
		cout << endl;
	}
	return 0;
} 

0 条评论

目前还没有评论...