P1101 单词方阵
Posted liuzhaojun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1101 单词方阵相关的知识,希望对你有一定的参考价值。
题目描述
给一n \times nn×n的字母方阵,内可能蕴含多个“yizhong
”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*
代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入格式
第一行输入一个数nn。(7 \le n \le 1007≤n≤100)。
第二行开始输入n \times nn×n的字母矩阵。
输出格式
突出显示单词的n \times nn×n矩阵。
输入输出样例
输入 #1
7 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa
输出 #1
******* ******* ******* ******* ******* ******* *******
输入 #2
8 qyizhong gydthkjy nwidghji orbzsfgz hhgrhwth zzzzzozo iwdfrgng yyyygggg
输出 #2
*yizhong gy****** n*i***** o**z**** h***h*** z****o** i*****n* y******g
#include<iostream> #include<string> #include<algorithm> using namespace std; const int inf=105; int a[inf][inf],n; char str[inf][inf]; string s="yyizhong"; struct node int x,y; c[inf]; void dfs(int x,int y,int step,int k,int k1) if(x>n||x<1||y>n||y<1) return ; if(step==8) for(int i=1;i<8;i++) a[c[i].x][c[i].y]=1; return ; int x2=x+k; int y2=y+k1; if(str[x2][y2]==s[step]) c[step].x=x2; c[step].y=y2; dfs(x2,y2,step+1,k,k1); int main() int x1[]=1,-1,0,0,-1,-1,1,1; int y1[]=0,0,-1,1,-1,1,-1,1; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>str[i][j]; fill(a[0],a[0]+inf*inf,0); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(str[i][j]==‘y‘) c[1].x=i; c[1].y=j; for(int m=0;m<8;m++) int x2=i+x1[m]; int y2=j+y1[m]; if(str[x2][y2]==s[2]) c[2].x=x2; c[2].y=y2; dfs(x2,y2,3,x1[m],y1[m]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]==1) cout<<str[i][j]; else cout<<‘*‘; cout<<endl; return 0;
还以为会超时,没想到过了
以上是关于P1101 单词方阵的主要内容,如果未能解决你的问题,请参考以下文章