HDU 2181 哈密頓繞行世界問題

2021-08-24 23:33:37 字數 533 閱讀 8776

由於資料量其實很小,直接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;

tpath[level]=k;

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

if(!vis[adj[k][i]])

dfs(adj[k][i],level+1);

vis[k]=0;

//注意在這裡要把vis[k]設定為0,因為乙個點會出現在多條路徑上,如果不設為0它就只

//出現在一條路徑,後續過程無法訪問到它

}int main()

while(scanf("%d",&start)&&start)

return 0;

}

HDU 2181 哈密頓繞行世界問題

用dfs字典序搜尋即可,搜到末尾時回到原來的位置就是一條路徑,可以加乙個小剪枝,如果搜尋中經過了起始位置,可以剪枝 我把路徑打表儲存在陣列裡,防止有過多的重複輸入 include include include include includeusing namespace std const int...

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