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