洛谷 P1101 單詞方陣(dfs)

2021-08-17 04:21:02 字數 1988 閱讀 2962

dfs

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

輸入:

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)。

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

輸出格式

突出顯示單詞的nxn矩陣。

輸入輸出樣例

輸入樣例#1:

7

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

aaaaaaa

輸出樣例#1:

*******

*******

*******

*******

*******

*******

*******

此題顯然是搜尋,而且自帶方向,我們只需從他所要求的單詞的第乙個字母開始。先找到『y』,從『y』向周圍8個方向搜尋,如果某個方向滿足條件,就依這個方向往下搜尋,直到把所有的字母找完。

ac**如下:

#include 

#include

#include

#include

using

namespace

std;

int n;

bool b[105][105];//標記

char a[101][101]=;//存放原方陣

string str("yizhong");//存放指定字串

int fx[8]=,

fy[8]=;//控制方向

void dfs(int i,int j,int k,int t)//k表示方向,t是已經找到的長度

return;

}if(t==7)//如果找完了

return;//返回

}int x=i+fx[k];//k為找到的方向

int y=j+fy[k];

if(a[x][y]==str[t])

dfs(x,y,k,t+1);//如果滿足條件,就dfs

}int main()

}memset(b,0,sizeof(b));//清0標記,1代表滿足條件

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

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

printf("\n");

}printf("\n");

return

0;}

總結,做dfs的題首要的是搜尋邏輯(即按照怎樣的原則,這往往在題目中有所體現)。

洛谷P1101 單詞方陣 DFS

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

洛谷P1101單詞方陣

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

洛谷 P1101 單詞方陣

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