輸出演算法分析
解題標程
給一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...