貨郎問題 Java 實現

2021-06-13 12:03:16 字數 2931 閱讀 7351

我使用的方法是:

假設圖有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...