P1101 單詞方陣(洛谷訓練場)題解

2021-10-12 03:50:08 字數 2094 閱讀 5949

輸出演算法分析

解題標程

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

第二行開始輸入n×n的字母矩陣。

突出顯示單詞的n×n矩陣。

7

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

8

qyizhong

gydthkjy

nwidghji

orbzsfgz

hhgrhwth

zzzzzozo

iwdfrgng

yyyygggg

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*\*\*\*\*\*\*

\*yizhong

gy\*\*\*\*\*\*

n\*i\*\*\*\*\*

o\*\*z\*\*\*\*

h\*\*\*h\*\*\*

z\*\*\*\*o\*\*

i\*\*\*\*\*n\*

y\*\*\*\*\*\*g

這道題是個定向深搜。

一開始我以為要以y為起點對其周圍搜尋i,然後以i為第二個點搜尋z,依次類推。

但是這道題只要確定y的位置以及周圍i的方向,然後進行定點搜尋就可以解決。

#include

#include

#include

using

namespace std;

typedef

struct node

node;

node to[8]

=,,,

,,,,

};node road[7]

;char ch[8]

=;int n;

int ans[

1005][

1005];

int map[

1005][

1005];

char s[

1005][

1005];

void

dfs(

int x,

int y,

int k,

int step)

int nx=x+to[k]

.x;int ny=y+to[k]

.y;if

(step==

6||s[nx]

[ny]

==ch[step+1]

)return;}

intmain()

}}for(

int i=

0;i) cout << endl;

}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...