HOJ 2181 哈密頓繞行世界問題

2021-10-02 04:44:11 字數 811 閱讀 7935

這題可以使用dfs的方法結合stack的使用進行求迴路

#include

#include

#include

#pragma(disable:4996)

using

namespace std;

const

int n =20;

int first, click, times, a[n]

[n], vis[n]

;//first表示出發點

//click用來標記以經走過多少個城市

//times計算可走的路線數目

//a為鄰接矩陣

//vis用來標記城市是否走過

void

dfs(stack<

int>

&s,int k)

for(

int i =

0; i <= n; i++

) s.

push

(b[i]);

cout << times++

<<

": "

;for

(int i =

0; i <= n; i++

) cout << endl;

}for

(int i =

0; i < n; i++)}

}int

main()

while

(scanf

("%d"

,&x)!=0

&& x !=0)

return0;

}

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