哈密頓繞行世界問題 HDU 2181

2022-08-20 22:24:07 字數 569 閱讀 2120

題意讓你先輸20行數表示20個城市及所相鄰的三個城市(行數就是該城市),然後給你乙個數,從這個(給的數就表示城市)城市出發走遍所有城市一次回到出發的城市;看著複雜,仔細想想是個不算太難的深搜題,主要你得能把20行的數看成類似的地圖,然後需要注意定義乙個整形陣列儲存能到達的城市最後按順序輸出就可以了。

**:

#include#include

#include

#include

#include

#include

using

namespace

std;

int mp[25][3

];int vis[25

];int ans[25

];int cas=1;//

int dd[8][2]=;

void dfs(int a,int len,int c)//

核心**,自己再理解理解這裡就不過多解釋了

if(!vis[t])

dfs(t,len+1

,c);

} vis[a]=0;}

intmain()

}

HDU 2181 哈密頓繞行世界問題

用dfs字典序搜尋即可,搜到末尾時回到原來的位置就是一條路徑,可以加乙個小剪枝,如果搜尋中經過了起始位置,可以剪枝 我把路徑打表儲存在陣列裡,防止有過多的重複輸入 include include include include includeusing namespace std const int...

HDU 2181 哈密頓繞行世界問題

由於資料量其實很小,直接dfs即可,細節見注釋 include include includeusing namespace std bool vis 21 int adj 21 3 cnt,tpath 20 start void dfs int k,int level return vis k 1...

HDU 2181 哈密頓繞行世界問題

解題思路 dfs遍歷出所有的路徑,遍歷過程中用記錄當前點的字首,每次搜到一條道路直接遞迴輸出即可 ac include include include include using namespace std const int maxn 21 int pre maxn bool vis maxn i...