題目:
乙個規則的實心十二面體,它的 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 #include6 #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...