HDU 2181 哈密頓繞行世界問題 DFS

2022-05-07 06:06:10 字數 732 閱讀 6422

題意:給出乙個十二面體,它的每個頂點是乙個城市,從乙個城市m出發並回到m,輸出所有可行的路徑

先把邊記錄下來,再深搜

1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #include

9 #include10 #include11

using

namespace

std;

1213 typedef long

long

ll;14

const

int inf = (1

<<30)-1;15

const

int mod=1000000007;16

const

int maxn=1000005;17

18int g[105][105

];19

intans[maxn];

20int

s,kase,m;

2122

void dfs(int

a)29

30for(int i=1;i<=20;i++)39}

4041}42

4344

intmain()

53while(scanf("

%d",&m)!=eof&&m)

57return0;

58 }

view code

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