HDU2181 哈密頓繞行世界問題

2022-09-01 13:21:10 字數 1350 閱讀 3411

題目:

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

輸入:

前20行的第i行有3個數,表示與第i個城市相鄰的3個城市.第20行以後每行有1個數m,m<=20,m>=1.m=0退出.

輸出:

輸出從第m個城市出發經過每個城市1次又回到m的所有路線,如有多條路線,按字典序輸出,每行1條路線.每行首先輸出是第幾條路線.然後個乙個: 後列出經過的城市.參看sample output

樣例:

分析:dfs回溯,注意題目要求的是迴路

1 #include2 #include3 #include4 #include5 #include

6 #include7 #include8 #include9 #include10 #include11 #include12 #include13 #include14 #include

15 #include16

#define pi acos(-1.0)

17const

int inf = 0x3f3f3f3f;18

const

int ninf = -inf - 1

;19 typedef long

long

ll;20

using

namespace

std;

21int map[25][5

];22

intm, rec;

23int vis[25

];24

int ans[25

];25

void dfs(int x, int

t)26

37if (!vis[map[x][i]])

3844}45

}46intmain()

4759

return0;

60 }

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