DFS之搜尋順序

2021-10-24 18:32:18 字數 1525 閱讀 4906

acwing 1117單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲。

現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」,每個單詞最多被使用兩次。

在兩個單詞相連時,其重合部分合為一部分,例如 beast 和 astonish ,如果接成一條龍則變為 beastonish。

我們可以任意選擇重合部分的長度,但其長度必須大於等於1,且嚴格小於兩個串的長度,例如 at 和 atide 間不能相連。

輸入格式

輸入的第一行為乙個單獨的整數 n 表示單詞數,以下 n 行每行有乙個單詞(只含有大寫或小寫字母,長度不超過20),輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。

你可以假定以此字母開頭的「龍」一定存在。

輸出格式

只需輸出以此字母開頭的最長的「龍」的長度。

資料範圍

n≤20

輸入樣例:5at

touch

cheat

choose

tact

a輸出樣例:

23提示

連成的「龍」為 atoucheatactactouchoose。

#include

using

namespace std;

const

int n =30;

string word[n]

;int g[n]

[n];

//第i和第j個單詞的最短連線段長度

int used[n]

;int res;

int n;

void

dfs(string s,

int u)

//當前的龍 和 龍尾部的單詞是第幾個

used[u]--;

//回溯

}int

main()

}

string a;

cin>>a;

for(

int i=

0;i(word[i][0

]== a[0]

)//判斷龍頭

dfs(word[i]

,i);

//從w[i]開始 當前用到i-th單詞

cout<}

acwing 1116馬走日

#include

using

namespace std;

const

int n =10;

bool st[n]

[n];

int dx=

;int dy=

;int x,y,n,m;

int ans;

void

dfs(

int x,

int y,

int cnt)

for(

int i=

0;i<

8;i++)}

}int

main()

}

搜尋剪枝DFS

tempter of the bone hdu1010 題意 給乙個圖,找出乙個看能否能在t的時間內從s到達d點 思路 bfs肯定不行,因為bfs找到的是最短時間的路徑,無法對在t時間點到達d點進行判斷 於是才想到了dfs,這個能把所有的情況遍歷一遍的演算法,雖然圖的長寬只有7,但是總是超時,這次終...

DFS搜尋 剪枝

hdu 5952 題意 給出一張無向圖,然後判斷這張圖中一共有多少個不同的大小為s的完全圖 完全圖的頂點數為s個 題目保證每個點的度不大於20。完全圖 n個點兩兩之間都有一條邊的圖叫完全圖。思路 由於頂點個數很少,而且每個點的度數最多是20,所以可以暴力優化,建圖,對於每個s點完全子圖,如果i點在子...

搜尋DFS演算法

dfs 深度搜尋法 1.首先確定深度或搜尋終點 2.利用函式遞迴 適當做回溯 缺點 難以找到最優解但占用記憶體小 例題1 oil deposits 經典連通塊問題 ac include include include using namespace std char tian 101 101 int...