洛谷P1101 單詞方陣 深搜

2021-09-26 06:55:42 字數 2602 閱讀 8800

題目描述

給一n×n的字母方陣,內可能蘊含多個「yizhong」單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 8 個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用*代替,以突出顯示單詞。例如:

輸入:                 輸出:                                  

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 複製

*******

*******

*******

*******

*******

*******

*******

輸入 #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

深度優先搜尋

思路:先找y,如果找到y了就說明它附近可能會有我們要找的單詞 yizhong

於是接下來沿著8個方向找izhong, 如果越界或者不符合就捨棄, 如果找到了就記錄在ans陣列裡面,

最後輸出ans陣列

**簡化技巧

方向陣列的運用

const

int dx=

;const

int dy=

;

定義常量比較陣列

const string cmp =

"yizhong"

;

這樣判斷是否有izhong的時候就比較方便 可以用乙個for迴圈,比如,x行y列有個「y」,以第i個方向為例:

for

(int j =

1;j <=

6;j++)if

(cmp[j]

!= a[nx]

[ny]

)}

這裡j是步長,這裡的j正好對應了yizhong 的第j位 所以正好可以對應起來

完整**:

#include

#include

#include

using namespace std;

const

int maxn =

110;

const

int dx=

;//方向陣列

const

int dy=

;const string cmp =

"yizhong"

;// 比較陣列

char a[maxn]

[maxn]

, ans[maxn]

[maxn]

;int mark[maxn]

[maxn]

, n;

void

dfs(

int x,

int y)

if(cmp[j]

!= a[nx]

[ny])}

if(flag ==0)

continue

;for

(int j =

0;j <=

6;j++)}

return;}

intmain()

}for

(int i =

1;i <= n;i++)}

for(

int i =

1;i <= n;i++

) cout << endl;

}return0;

}

搜尋 深搜 洛谷 P1101 單詞方陣

這是本蒟蒻的第一篇題解 不喜勿噴 給定乙個矩陣,有上下左右斜向共八個方向,要求找出所有的從每乙個 y 出發,往某個方向遍歷,直到連續地遍歷完 yizhong 每個字母的路徑。簡單的搜尋題。如下 1 include2 using namespace std 3char a 105 105 b 105 ...

洛谷P1101單詞方陣

整體的思路 在矩陣中找到 y 然後對 y 進行八個方向的搜尋 用cmp陣列存 yizhong 在每乙個方向中和cmp進行比較,若存在任意乙個不同,則處理下乙個方向。include includeusing namespace std const int dx 方向陣列 const int dy co...

洛谷 P1101 單詞方陣

題目描述 給一nxn的字母方陣,內可能蘊含多個 yizhong 單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間 color red 可以 color 交叉,因此有可能共用字母。輸出時,將不是單詞的字母用 代替,以突出顯示單詞。例如...