我使用的方法是:
假設圖有n個頂點, 若干條邊
1) 從所有邊中找到 n-1 條邊構成選擇組合
2) 從權值和最小的組合開始驗證邊能否這個組合能遍歷所有的頂點
如果能遍歷則找到答案
因此演算法的關鍵是:
1) 找子集合並按權值和排序, 這個問題我在這篇文章中提到
2) 驗證邊能否遍歷所有的頂點
我的驗證方法是, 統計邊集合的頂點, 每個頂點的統計值不能為 0, 也不能大於2
程式我放在最後, 其操作方式是:
1) 滑鼠左鍵選下乙個組合(不驗證)
2) 滑鼠右鍵驗證當前組合,如果不滿足, 自動找到下乙個能構成路徑的組合
執行的結果
滿足條件的組合
不滿足條件的組合
下乙個滿足條件的組合
此演算法在判斷邊是否構成路徑時, 強求必須邊邊相連, 因此有一定缺陷,在下圖中
按照演算法取路徑是 a b c d, 而實際上 a b c b d 路徑更短, 當然如果 c-d 的長度是 180, 當然原演算法就是合理的
最普通的貨郎擔問題實現
題目描述 n個頂點,從1頂點開始出發走遍所有結點回到1頂點最小路程。最普通的貨郎擔問題實現 上圖輸入 41 3 1 1 4 7 2 1 8 2 3 5 2 4 1 3 1 7 3 2 2 3 4 6 4 1 2 4 2 5 4 3 3 0 0 0 二 稍微題目修改下,從頂點1開始不用全部走遍各個結點...
動態規劃貨郎擔問題
參考和 演算法設計與分析 這本書 問題描述 1 貨郎擔問題提法 有n個城市,用1,2,n表示,城i,j之間的距離為dij,有乙個貨郎從城1出發到其他城市一次且僅一次,最後回到城市1,怎樣選擇行走路線使總路程最短?2 旅行商問題的提法 假設有乙個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路經的限...
C語言寫貨郎問題(貪心演算法)
這個是用c語言寫的求解貨郎問題的解,注意這是貪心演算法,並不是動態規劃,也就是說這個不一定是最優解 include include include static int m dis 100 static int r 100 static int distance 100 100 static int...