HDU 2181 哈密頓繞行世界問題

2022-01-10 11:26:28 字數 742 閱讀 1953

descriptions:

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

input

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

output

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

注意格式:pa了一發,發現是少了加了乙個空格

#includeusing namespace std;

int g[25][5];//世界城市

int path[25];//答案陣列

bool book[25];//標記是否使用過

int total;//有幾種環遊的個數

int m;

void dfs(int x,int sum)

if (!book[g[x][i]])

}}int main()

while (cin >> m && m)

return 0;

}

收穫:想要按照字典序排序時,可以在輸入的時候就預排序,這樣就可以直接用了

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