HDU2181 哈密頓世界環遊

2021-08-03 21:33:32 字數 974 閱讀 7646

小夥子要環遊世界再回來,現在輸入20組數,預設輸入 的第n組資料就是第n個城市,該組資料表明了從該城市能到達的下乙個城市。再輸入y個數字,表示要從該城市環遊一周再返回原點。輸出:輸出所有的旅行路線。

因為要求找出所有的路線,所以要用深度優先搜尋。(利用深度優先搜尋能遍歷所有的情況的特性)。

解釋一下題目中的一些用來標記的引數(和陣列):

#define max 21表示規模

bool map[max][max];地圖,第一維表示該節點,第二維表示下乙個節點

bool used[max];標記走過的城市

int cas;環遊世界的起點和終點

**如下:(主要看注釋)

#include 

#include

#define max 21

bool

map[max][max];//實心體地圖

//第乙個數記錄當前節點

//第二個樹記錄下乙個能走的節點

bool used[max];//標記城市走過

int res[max];//儲存當前走過的路徑

int num;//記錄列印到了第幾個

int cas;

//輸入函式,當下乙個城市能走設定為true

void init()

}//深搜

void dfs(int dep, int count)

printf("%d\n", res[0]);//輸出起點

}return;

}//該路徑輸出完畢去找下乙個路徑

//dep這個點

//j下乙個要走的點

//找路徑的過程

for(j = 1; j <= 20; j ++)

}}int main()

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