1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=110; 4 struct P 5 { 6 int x,y; 7 }c[maxn];//记录路径 8 char fz[maxn][maxn],stand[]="yizhong";//fz保存单词矩阵,stand保存“yizhong”便于匹配 9 int vis[maxn][maxn];//保存路径,是否该点为答案 10 int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//八向的常量数组 11 void dfs(int x,int y,P c[],int k,int cur) 12 { 13 if(cur==7) 14 { 15 for(int i=0;i<7;i++) 16 vis[c[i].x][c[i].y]=1; 17 } 18 else 19 { 20 int dx=x+dir[k][0];//沿着正确的k方向搜索 21 int dy=y+dir[k][1]; 22 if(cur==6||fz[dx][dy]==stand[cur+1]) 23 { 24 c[cur].x=x;c[cur].y=y; 25 dfs(dx,dy,c,k,cur+1); 26 } 27 } 28 } 29 int main() 30 { 31 int n; 32 cin>>n; 33 for(int i=0;i<n;i++) 34 cin>>fz[i]; 35 memset(vis,0,sizeof(vis)); 36 for(int i=0;i<n;i++) 37 for(int j=0;j<n;j++) 38 if(fz[i][j]==‘y‘) for(int k=0;k<8;k++) 39 { 40 int x=i+dir[k][0]; 41 int y=j+dir[k][1]; 42 if(fz[x][y]==‘i‘) 43 dfs(i,j,c,k,0); 44 } 45 for(int i=0;i<n;i++) 46 { 47 for(int j=0;j<n;j++) 48 if(vis[i][j]!=0) cout<<fz[i][j]; 49 else cout<<"*"; 50 cout<<endl; 51 } 52 return 0; 53 }
原题:
在一个puzzle中存在字符串"yizhong",找出全部的连续目标串并以‘*‘输出。
P.S. 若有侵权,请联系博主,我会尽快删除。
原文:https://www.cnblogs.com/lirunyi/p/12496430.html