HDU 2181 哈密頓繞行世界問題

2021-08-16 15:19:24 字數 514 閱讀 1113

用dfs字典序搜尋即可,搜到末尾時回到原來的位置就是一條路徑,可以加乙個小剪枝,如果搜尋中經過了起始位置,可以剪枝

我把路徑打表儲存在陣列裡,防止有過多的重複輸入

#include#include#include#include#includeusing namespace std;

const int n=20+2;

int g[n][5]; //鄰接表

int ans[n][65][n]; //儲存路徑

int p[n],pos,cnt[n];

bool vis[n];

void dfs(int u,int d,int md)

for(int i=0;i<3;i++) }

int m;

int main()

for(int i=1;i<=20;i++) //打表

while(~scanf("%d",&m)&&m) }

return 0;

}

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

HDU 2181哈密頓繞行世界(DFS)

題解 用乙個二維陣列 way i 3 儲存i點能到達所有 地方,然後在dfs的擴充套件地方就去遍歷 後面那個3就好了 include using namespace std int way 22 5 儲存路徑 int vis 22 標記陣列 int path 100 記錄路徑 int m,k voi...