單詞方陣(dfs)
阿新 • • 發佈:2018-06-02
函數 () bit IV dfs AC 連續 else hide
給一nXn的字母方陣,內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間[color=red]可以[/color]交叉,因此有可能共用字母。輸出時,將不是單詞的字母用“*”代替,以突出顯示單詞。例如:
輸入:
8 輸出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
輸入輸出格式
輸入格式:
第一行輸入一個數n。(7<=n<=100)。
第二行開始輸入nXn的字母矩陣。
輸出格式:
突出顯示單詞的nXn矩陣。
輸入輸出樣例
輸入樣例#1:
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
輸出樣例#1:
#######
#######
#######
#######
#######
#######
#######
典型的深搜,就是過程有點麻煩,先規定一個字符串yizhong,深度每增加1,對應字符串位置加一。 AC代碼; #include <bits/stdc++.h> using namespace std; int c[110][110]={0};View Codechar bb[30]="yizhong"; int b[110][2]={0}; int n; char a[110][110]; void dfs(int x,int y,int t,int fang)//fang是記錄方向;t記錄深度; { if(t==7)//代表成功,用C字符串記錄; { for(int i=0;i<7;i++) { c[b[i][0]][b[i][1]]=1; } } else { if(fang==1) { if(x-1>=0&&y-1>=0&&a[x-1][y-1]==bb[t]) { b[t][0]=x-1; b[t][1]=y-1; dfs(x-1,y-1,t+1,fang); } } else if(fang==2) { if(y-1>=0&&a[x][y-1]==bb[t]) { b[t][0]=x; b[t][1]=y-1; dfs(x,y-1,t+1,fang); } } else if(fang==3) { if(y+1<n&&x+1<n&&a[x+1][y+1]==bb[t]) { b[t][0]=x+1; b[t][1]=y+1; dfs(x+1,y+1,t+1,fang); } } else if(fang==4) { if(x+1<n&&a[x+1][y]==bb[t]) { b[t][0]=x+1; b[t][1]=y; dfs(x+1,y,t+1,fang); } } else if(fang==5) { if(y-1>=0&&x+1<n&&a[x+1][y-1]==bb[t]) { b[t][0]=x+1; b[t][1]=y-1; dfs(x+1,y-1,t+1,fang); } } else if(fang==6) { if(y+1<n&&a[x][y+1]==bb[t]) { b[t][0]=x; b[t][1]=y+1; dfs(x,y+1,t+1,fang); } } else if(fang==7) { if(y+1<n&&x-1>=0&&a[x-1][y+1]==bb[t]) { b[t][0]=x-1; b[t][1]=y+1; dfs(x-1,y+1,t+1,fang); } } else if(fang==8) { if(x-1>=0&&a[x-1][y]==bb[t]) { b[t][0]=x-1; b[t][1]=y; dfs(x-1,y,t+1,fang); } } } } int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",&a[i]); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(a[i][j]==‘y‘) { b[0][0]=i;//這裏要把第一個位置標記一下,因為dfs函數沒記錄第一個; b[0][1]=j; for(int w=1;w<=8;w++) { dfs(i,j,1,w); } } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(c[i][j]==0) { printf("*"); } else { printf("%c",a[i][j]); } } printf("\n"); } return 0; }
單詞方陣(dfs)