HDU 2181 哈密頓繞行世界問題

2022-05-30 04:57:08 字數 1326 閱讀 6167

題意:乙個規則的實心十二面體,它的 20個頂點標出世界著名的20個城市,你從乙個城市出發經過每個城市剛好一次後回到出發的城市,給出每乙個點相鄰的點,求每乙個序列。

思路:dfs.

view code

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8

using

namespace

std;

9const

int n=21;10

11bool

to[n][n],vis[n];

12int

m,cnt;

13int

b[n];

1415

void dfs(int s,int

t)23

for(int i=1;i<=20;i++)

30} 31}

3233

intmain()

46while(scanf("

%d",&m),m)

53return0;

54 }

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8

using

namespace

std;

9const

int n=31;10

const

int inf=1

<<30;11

12int

len[n][n];

13bool vis[8

],flag[n];

14int n,k,b[8

];15

intmin,cnt;

1617

void dfs(int s,int t,int

sum)

22for(int i=1;i<=cnt;i++)28}

29}3031

intmain()

47 cnt=0;48

for(int i=1;i)

52 memset(vis,false,sizeof

(vis));

53 min=inf;

54 dfs(0,0,0

);55 printf("

%d\n

",min);56}

57return0;

58 }

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