1. 程式人生 > >旅行商問題——貪心演算法

旅行商問題——貪心演算法

旅行商問題(TSP)

旅行商問題是一個經典的組合優化問題。

經典的TSP問題可以描述為:一個商品推銷員要去若干個城市進行商品推銷,該推銷員從一個城市出發,需要經過所有城市,回到出發地。應如何選擇行進路線,以使總的行程最短。

從圖論的角度來看,該問題實質是在一個帶權完全無向圖中,找一個權值最小的Hamilton迴路。

由於該問題的可行解是所有頂點的全排列,隨著頂點數的增加,會產生組合爆炸。

在這裡我們以貪心演算法來解決這個問題,當資料規模越大時,以近似解來替代最優解。

#include <iostream>
#include <assert.h>

using
namespace std; #define MAX 1000000 #define n 4 int D[n][n]; //記錄兩城市間距離 int S[n]; //記錄第i次去的城市 void Init() { for (int i = 0; i < n; ++i) for (int j = i; j < n; ++j) D[i][j] = D[j][i] = MAX; for (int i = 0; i < n; ++i) S[i] = -1; } bool checkAccess(int city) { //判斷該城市是否訪問過
for (int i = 0; i < n; ++i) if (S[i] == city) return true; return false; } int findCity(int city) { //查詢下一次要去的距離最短的城市 int min = MAX; int nextCity; for (int i = 0; i < n; ++i) if (D[city][i] < min && checkAccess(i) == false) { min = D[city][i]; nextCity = i; } return
nextCity; } void TSP(int start) { S[0] = start; size_t sum = 0; for (int i = 1; i < n; ++i) { S[i] = findCity(S[i - 1]); sum += D[S[i - 1]][S[i]]; } printf("訪問順序為:"); for (int i = 0; i < n; ++i) printf("%d", S[i]); printf("\n"); printf("總距離為:%d", sum); } int main() { int i, j, k; Init(); //初始化距離陣列和訪問陣列 /*while (scanf("%d%d%d",&i,&j,&k) != EOF) { assert(i >= 0 && j >= 0 && k > 0 && i != j); D[i][j] = D[j][i] = k; }*/ D[0][1] = D[1][0] = 2; D[0][2] = D[2][0] = 6; D[0][3] = D[3][0] = 5; D[1][2] = D[2][1] = 4; D[1][3] = D[3][1] = 4; D[2][3] = D[3][2] = 2; TSP(0); getchar(); return 0; }

相關推薦

演算法行商A*演算法

#include "stdio.h" const int max=9999; const int ax=50; int isbest(int i,int bestpath[],int p)//檢測改節點是否已經加入bestpath[]中 { for(in

TSP_行商問題 - 貪心演算法

TSP_旅行商問題 - 貪心演算法 TSP_旅行商問題-貪心演算法 TSP_旅行商問題-模擬退火演算法 TSP_旅行商問題-遺傳演算法 TSP_旅行商問題-基本蟻群演算法 問題描述 尋找最短路徑使得其經過所有城市 測試資料

行商問題——貪心演算法

旅行商問題(TSP) 旅行商問題是一個經典的組合優化問題。 經典的TSP問題可以描述為:一個商品推銷員要去若干個城市進行商品推銷,該推銷員從一個城市出發,需要經過所有城市,回到出發地。應如何選擇行進路線,以使總的行程最短。 從圖論的角度來看,該問題實質是在

貪心演算法行商問題(TSP)

TSP問題(Traveling Salesman Problem,旅行商問題),由威廉哈密頓爵士和英國數學家剋剋曼T.P.Kirkman於19世紀初提出。問題描述如下: 有若干個城市,任何兩個城市之間的距離都是確定的,現要求一旅行商從某城市出發必須經

python演算法——行商問題

旅行商問題 旅行商問題是一個執行時間非常長,時間增長的非常快的問題。甚至很多聰明的人認為都沒有更好的解決方法。 例項 有一個商人,他要前往5個城市,A,B,C,D,E。怎麼來確保行程最短。 (先暫且不計算每個城市的距離) 那麼他一共有幾種路線呢? 1.A-B-C-D-E 2.A-

簡單易懂,蟻群演算法解決行商問題

轉載宣告: 原文把蟻群解決旅行商問題寫的很清楚,只不過本人認為原文中有一些小錯誤,特此更改(文中紅色加粗字型為改正處),程式碼中出現的一些演算法的小問題也進行了更正(比如程式碼中的貪心演算法),程式碼也附在下面,謝謝博主的分享。 1.關於旅行商(TSP)問題及衍化

遺傳演算法解決TSP行商問題(附:Python實現)

前言 我先囉嗦一下:不是很喜歡寫計算智慧的演算法,因為一個演算法就要寫好久。前前後後將近有兩天的時間。 好啦,現在進入正題。 巡迴旅行商問題(TSP)是一個組合優化方面的問題,已經成為測試組合優化新演算法的標準問題。應用遺傳演算法解決 TSP 問題,首先對訪問

行商問題之遺傳演算法

問題描述 行商問題(Travelling Salesman Problem, 簡記TSP,亦稱貨郎擔問題):設有n個城市和距離矩陣,其中表示城市i到城市j的距離,i,j=1,2 … n,則問題是要找出遍訪每個城市恰好一次的一條迴路並使其路徑長度為最短。 演

TSP_行商問題-基本蟻群演算法

TSP_旅行商問題-基本蟻群演算法 旅行商系列演算法 TSP_旅行商問題-貪心演算法 TSP_旅行商問題-模擬退火演算法 TSP_旅行商問題-遺傳演算法 TSP_旅行商問題-基本蟻群演算法 基於基本蟻群演算法解決連續優化

TSP_行商問題-遺傳演算法

TSP_旅行商問題-遺傳演算法 TSP_旅行商問題-貪心演算法 TSP_旅行商問題-模擬退火演算法 TSP_旅行商問題-遺傳演算法 TSP_旅行商問題-基本蟻群演算法 問題描述 對於n組城市座標,尋找最短路徑使其經過

TSP_行商問題-模擬退火演算法

TSP_旅行商問題-模擬退火演算法 TSP_旅行商問題-貪心演算法 TSP_旅行商問題-模擬退火演算法 TSP_旅行商問題-遺傳演算法 TSP_旅行商問題-基本蟻群演算法 問題描述 對於n組城市座標,尋找最短路徑使其

圖論演算法(4) --- TSP行商問題 求最短迴路(acm)

對於TSP旅行商問題,我們做的最多的也就是求最短迴路了,那麼對於一個數據量適中的圖來說,一般的dfs方法即可求解,在這裡,我應用dfs的思想來實現此問題,而關鍵之處在於對矩陣的改進,這樣的操作可以使得應用搜索思想求TSP問題時,效率有顯著的提高。對於矩陣的改進,我們對矩陣的

行商問題TSP(蟻群演算法Java)

旅行商問題,即TSP問題(Traveling Salesman Problem)是數學領域中著名問題之一。假設有一個旅行商人要拜訪N個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要 回到原來出發的城市。路徑的選擇目標是要求得的路徑路程為所有路徑之中

【原】總(tu)結(cao)粒子群演算法(PSO)解決行商問題(TSP)

粒子群演算法(PSO)是一套比較經典的演算法, 旅行商問題(TSP)同樣是一個經典的問題。如果想用PSO去解決TSP問題的話,那麼應該如何去解決呢? 初看之下一陣欣喜,因為我發現,如果按照論文中的方法能夠成功的話,那麼包括布穀鳥,螢火蟲都可以通過類似的辦法

PSO解決TSP問題(粒子群演算法解決行商問題)--python實現

歡迎私戳關注這位大神! 有任何問題歡迎私戳我->給我寫信 首先來看一下什麼是TSP: The travelling salesman problem (TSP) asks the following question: "Given a list

遺傳演算法求解行商問題

1.遺傳演算法         遺傳演算法是受大自然的啟發,模擬生物在自然環境中的遺傳和進化過程而形成的一種自適應、具有全域性優化能力的隨機搜尋演算法。 自然界的進化包括3個原則: (1)適者生存原則,這意味著適應能力強的物種,會在殘酷的競爭中生存下來,而適應能力差的物種會

【機器學習】利用蟻群演算法求解行商(TSP)問題

如果喜歡這裡的內容,你能夠給我最大的幫助就是轉發,告訴你的朋友,鼓勵他們一起來學習。 If you like the content here, you can give me the greatest help is forwarding, tell you

粒子群演算法求解行商問題TSP (JAVA實現)

粒子群演算法求解旅行商問題TSP 寫在開頭: 最近師妹的結課作業問我,關於使用粒子群求解TSP問題的思路。我想了想,自己去年的作業用的是遺傳演算法,貌似有些關聯,索性給看了看程式碼。重新學習了一遍粒子群演算法,在這裡記錄一下,算是對知識的總結,鞏固一下。

演算法課堂實驗報告(五)——python回溯法與分支限界法(行商TSP問題)

python實現回溯法與分支限界 一、開發環境 開發工具:jupyter notebook 並使用vscode,cmd命令列工具協助程式設計測試演算法,並使用codeblocks輔助編寫C++程式 程式語言:python3.6 二、實驗目標 1. 請用回溯法求對稱的旅

遺傳演算法求解行商(TSP)問題

1. TSP問題概述 TSP問題即旅行商問題,是數學領域的著名問題之一。假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要回到原來出發的城市。路徑的選擇目標是要使求得的路徑路程為所有路徑之中的最小值。 2. 基於遺傳演算法