hdu2128 哈密頓繞行世界問題

2021-10-04 18:54:44 字數 733 閱讀 1828

hdu2128

使用dfs搜尋一下就能過,對於需要字典序從小到大排序,我們可以預處理給出的邊。將與第i個點相連的邊按照從小到大的順序排好。由於dfs時是從0到n的,這樣就保證了字典序從小到大。

還有一點注意的是給定的m點在一開始就被標記了,當再次訪問到它的時候step必須等於19才能訪問。

#include

#include

#include

#include

using

namespace std;

int vis[30]

, ans[30]

;int m, num =1;

vector <

int> g[30]

;void

dfs(

int v,

int step)

cout << m << endl;

return;}

else

if(step ==20)

return;

vis[v]=1

; ans[step]

= v;

for(

int i=

0; i.size()

; i++)

vis[v]=0

;}intmain()

while

(cin >> m && m)

return0;

}

DFS專攻 HDU 2128 哈密頓繞行世界問題

又一道需要dfs回溯的好題,比較簡單,不過現在也正好用來練習dfs,等把簡單的都弄會了,再搞難的 go on include include include include include include include include include include include define ...

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...