洛谷 P1101 單詞方陣

2022-05-13 07:47:45 字數 2291 閱讀 7645

給一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

解析

dfs,思路比較簡單,dfs時記錄一下八個方向,記錄到哪乙個字母了,再記錄當前座標。搜尋之前先找到單詞的方向,注意越界判斷,之後暴力搜尋即可。

**

#include#include

#include

using

namespace

std;

char mp[105][105

];int book[105][105

];int

n;char word[8]=;

bool

flag;

int changex[9]=;

int changey[9]=;//

八個方向

vectorvx,vy;

void dfs(int xx,int yy,int num,int direct)//

座標,第幾個字母,方向

flag=true

;

return

; }

int newx=xx+changex[direct];

int newy=yy+changey[direct];

if(newx>n&&newx<1) return

;

if(newy>n&&newy<1) return

;

if(mp[newx][newy]==word[num])

//pop_back不要過度

}

return;}

intmain()

}for(int i=1;i<=n;i++)}}

}}

}for(int i=1;i<=n;i++)

cout

<}

cout

<}

return0;

}//注意可以選重複的,之前還加了去重 ……

洛谷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...