題目描述
給一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 交叉,因此有可能共用字母。輸出時,將不是單詞的字母用 代替,以突出顯示單詞。例如...