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 57 58 59 60 61 62 63 64 65 66 67
| #include <iostream> #include <cstring> #include <cmath> #include <cstdio> #include <algorithm> #include <vector> #define ll long long using namespace std;
char str[100][100]; char s[9]={"yizhong"}; int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; int vis[100][100]; int n;
struct node{ int x,y; }c[100];
void dfs(int x,int y,node c[],int k,int cur) { if(cur==7){ for(int i=0;i<7;i++){ vis[c[i].x][c[i].y]=1; } } else{ int dx=x+dir[k][0]; int dy=y+dir[k][1]; if(cur==6||str[dx][dy]==s[cur+1]){ c[cur].x=x; c[cur].y=y; dfs(dx,dy,c,k,cur+1); } } }
int main() { cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>str[i][j]; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(str[i][j]=='y'){ for(int k=0;k<8;k++){ int x=i+dir[k][0]; int y=j+dir[k][1]; if(str[x][y]=='i'){ dfs(i,j,c,k,0); } } } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(vis[i][j]) printf("%c",str[i][j]); else printf("*"); } printf("\n"); } return 0; }
|