首页 > 代码库 > 落谷P1101 单词方阵 //参考代码
落谷P1101 单词方阵 //参考代码
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 }
落谷P1101 单词方阵 //参考代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。