基於回溯法尋找哈密頓迴路

2021-07-29 21:51:21 字數 1058 閱讀 7748

回溯法是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯點」。

哈密頓圖是乙個無向圖,由天文學家哈密頓提出,由指定的起點前往指定的終點,途中經過所有其他節點且只經過一次。在圖論中是指含有哈密頓迴路的圖,閉合的哈密頓路徑稱作哈密頓迴路,含有圖中所有頂點的路徑稱作哈密頓路徑。

利用回溯法判斷哈密頓迴路是一種簡單粗暴的試探,也因而容易理解,其方法如下**,因注釋詳細,不再詳述。

#include using

namespace

std;

const

int max_v = 50

;void print(int path, int

v)//

path記錄路徑,visited記錄頂點是否訪問過,len記錄當前路徑的長度

bool hamcycle(int graph[max_v], int v, int path, bool visited, int

current)

//遍歷起點外其它頂點

for (int v = 1; v < v; v++)

}return

false;}

//從起點開始引導

bool hamcyclestart(int graph[max_v], int

v) ;

path[

0] = 0

; visited[v] = true; //

把起點標記為訪問過

//起點已確定,current從1開始

if (hamcycle(graph, v, path, visited, 1) == false

) print(path, v);

return

true;}

intmain()

}hamcyclestart(graph, v);

return0;

}

哈密頓迴路

圖類 include include include include includeusing namespace std template t為頂點的資料型別,e為圖中邊的權值的資料型別 class graph 返回最大頂點數 int numberofedges 返回當前邊數 t getvalue...

哈密頓迴路

哈密頓迴路好多,其實不是很難,但是看了一天了。看一會睡一會,什麼狀態啊。view code 題目 題目分析 有敵對關係的小朋友,不能坐在一起。最後圍成乙個圈,吃飯。將小朋友看成點,有敵對關係的看成沒有邊,最後構成乙個迴路。哈密頓迴路。小小總結 哈密頓迴路 充分條件 無向連通圖中任意2點度數之和大於等...

哈密頓迴路

quad 設無向圖 g v,e 其中 v 是點集,e 是邊集,n v 表示圖中點的數量,m e 表示圖中邊的數量。hamilton 通路 quad 經過圖 g 中每個節點一次且僅一次的通路稱為 hamilton 通路 hamilton 迴路 quad 經過圖 g 中每個節點一次且僅一次的通路稱為 h...