1 #include<iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 105; 6 char s[N][N], a[] = "yizhong"; 7 bool vis[N][N]; 8 int n; 9 int dx[8] = {0, 0, 1, -1, 1, 1, -1, -1}, 10 dy[8] = {1, -1, 0, 0, 1, -1, 1, -1}; 11 void dfs(int x,int y,int w,int i)//x,y,表示坐标,w表示方向,i表示第几个字符。 12 { 13 if(w==-1)//如果是第一次找 14 { 15 for(int j=0;j<8;j++) 16 { 17 int xx=x+dx[j]; 18 int yy=y+dy[j]; 19 if(s[xx][yy]==a[i]) 20 dfs(xx,yy,j,i+1);//扩展搜索; 21 } 22 return; 23 } 24 if(i==7)//如果已经找到这个字符串,回溯标记。 25 { 26 int xx=x,yy=y;//目前的位置给xx,yy 27 for(int j=1;j<=7;j++) 28 { 29 vis[xx][yy]=1;//标记找完的位置 30 xx=xx-dx[w]; 31 yy=yy-dy[w]; 32 } 33 return; 34 } 35 int xx=x+dx[w]; 36 int yy=y+dy[w]; 37 if(s[xx][yy]==a[i]) 38 dfs(xx,yy,w,i+1); 39 } 40 int main() 41 { 42 memset(s,‘*‘,sizeof s); 43 scanf("%d",&n); 44 for(int i=1;i<=n;i++) 45 scanf("%s",s[i]+1); 46 for(int i=1;i<=n;i++)//搜索到的开始字母 47 { 48 for(int j=1;j<=n;j++) 49 if(s[i][j]==‘y‘) dfs(i,j,-1,1); 50 } 51 for(int i=1;i<=n;i++)//输出 52 { 53 cout<<endl; 54 for(int j=1;j<=n;j++) 55 { 56 if(vis[i][j]) cout<<s[i][j]; 57 else cout<<‘*‘; 58 }} 59 return 0; 60 }
时间: 2024-10-21 14:29:35