給一 n×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
輸入格式:
第一行輸入乙個數 n。( 7≤n≤100 )。
第二行開始輸入n×n 的字母矩陣。
輸出格式:
突出顯示單詞的n*n矩陣。
輸入樣例#1:
7aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
輸出樣例#1:
**************
*******
*******
*******
*******
*******
分析:因為是要找沿著八個方向的單詞「yizhong」,我們想到了要遍歷而且是深度優先,沿八個方向就想著建立方向陣列,這時候注意建立方向陣列的時候一定要保證方向相反的兩個方向下標
之和應該為7,這樣可以方便我們回溯,本題採用的是染色法,題目質量不錯,可以多看看。
1 #include 2using
namespace
std;
3int n;char a[110][110];4
int bj[110][110];5
char book[7]="
izhong";
6int
dx,dy;
7int nexts[8][2]=,,,,,,,};//
按照相反的相加和為7來設定方向
8void ranse(int x,int y,int step,int
fang)
16void dfs(int x,int y,int step,int
fang)
22//
cout<<233<23 dx=x+nexts[fang][0];//
這裡是開始方向遷移
24 dy=y+nexts[fang][1
];25
if(a[dx][dy]!=book[step]) return ;//
不滿足則返回
26//
cout<<233<27 dfs(dx,dy,step+1,fang);//
沿著乙個方向一直走 28}
29int
main()35}
36for(int i=1;i<=n;i++)42}
43}44}
45for(int i=1;i<=n;i++)
51 cout<53return0;
54 }
洛谷P1101單詞方陣
整體的思路 在矩陣中找到 y 然後對 y 進行八個方向的搜尋 用cmp陣列存 yizhong 在每乙個方向中和cmp進行比較,若存在任意乙個不同,則處理下乙個方向。include includeusing namespace std const int dx 方向陣列 const int dy co...
洛谷 P1101 單詞方陣
題目描述 給一nxn的字母方陣,內可能蘊含多個 yizhong 單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間 color red 可以 color 交叉,因此有可能共用字母。輸出時,將不是單詞的字母用 代替,以突出顯示單詞。例如...
洛谷P1101 單詞方陣
給一n times nn n的字母方陣,內可能蘊含多個 yizhong 單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 88 個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用 代替,以突出顯示單詞。例如 輸入 8 輸出 qy...