hdu2181C 哈密頓繞行世界問題

2021-07-06 03:32:41 字數 618 閱讀 9777

這是乙個dfs搜尋題目,難點在於剪枝,以及路徑還原;下面是給出**及其詳解

/*

回溯方法的深度理解

9->3->2->13->5->head

pre[9]=3;

pre[3]=2;

pre[2]=13;

pre[13]=5;

pre[5]=head;

找到頭後,開始輸出head,然後回溯,輸出5,回溯,輸出13,回溯,輸出2,回溯

輸出2,回溯,輸出3,結束;;

*/#include #include #include #include using namespace std;

vectormap[25];

int a,b,c,m;

int pre[25],vist[25];

int num;

void printff(int temp)///回溯輸出

void dfs(int goal,int cnt )

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

}}int main()

while( scanf("%d",&m)!=-1)

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