围观大佬警钟
#include<stdio.h>
#include<iostream>
#include<cstring>
#define maxn 102
int n;
char word[maxn][maxn];
bool is[maxn][maxn];
bool ans[maxn][maxn];
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},
{1,1},{1,-1},{-1,1},{-1,-1}};
const char* target="yizhong";
void dfs(int x,int y,int k,int dirIndex){
//printf("%d %d %d %d\n",x,y,k,dirIndex);
if(x<1||y<1||x>n||y>n) return;
if(word[x][y]!=target[k]) return;
int dirx=dir[dirIndex][0],diry=dir[dirIndex][1];
if(k==6){
for(int i=0;i<7;i++){
ans[x-i*dirx][y-i*diry]=true;
}
return;
}
dfs(x+dirx,y+diry,k+1,dirIndex);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
std::cin>>word[i][j];
}
}
//输入修改之前
// for(int i=1;i<=n;i++){
// for(int j=0;j<=n;j++){
// scanf("%c",&word[i][j]);
// }
// }
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(word[i][j]==target[0]){
for(int k=0;k<8;k++){
int finalx=i+6*dir[k][0],finalY=j+6*dir[k][1];
if(finalx<1||finalx>n||finalY<1||finalY>n) continue;
//printf("%d %d %d %d\n",i,j,0,k);
dfs(i,j,0,k);
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(ans[i][j]){
printf("%c",word[i][j]);
}
else{
printf("*");
}
}
printf("\n");
}
return 0;
}