貪心演算法之TSP 旅行商 問題C 實現

2021-10-05 11:29:22 字數 1325 閱讀 6453

貪心演算法

貪心演算法(又稱貪婪演算法)是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。 所以不能保證最後結果是最優解,一般是最優解的近似解,但是貪心演算法的效率高。

問題描述

旅行商問題(tsp)又譯為旅行推銷員問題、貨郎擔問題,簡稱為tsp問題,是最基本的路線問題,該問題是在尋求單一旅行者由起點出發,通過所有給定的城市(不可重複)之後,最後再回到原點的最小路徑成本。

貪心策略

1.從某乙個城市開始,每次選擇乙個城市,直到所有的城市被走完。

2.每次在選擇下乙個城市的時候,只考慮當前情況,保證迄今為止經過的路徑總距離最小。通過該演算法求得的解並不一定是最優的,只是最優解的近似解。傳統的貪心演算法雖然能求得最優解,但是時間空間效能太差,所以一般採用改良的貪心演算法。

應用領域

1、如何規劃最合理高效的道路交通,以減少擁堵;

2、如何更好地規劃物流,以減少運營成本;

3、在網際網路環境中如何更好地設定節點,以更好地讓資訊流動等。

**實現

#include

#define n 4

using

namespace std;

int s[n]=;

// 記錄已經訪問過的城市, 初始化為-1,表示未訪問

int distance[n]

[n]=

,// 城市間距離陣列,10000表示自己到自己的距離,,

};bool

visit

(int k)

void

clostcitydistance

(int currentcity)

}for

(int i =

0; i < n; i++)}

void

tsp(

)printf

("%d->%d 距離為:%d \n"

,s[i]

,s[i+1]

,::distance[ s[i]

][ s[i+1]

]); sum +

=::distance[ s[i]

][ s[i+1]

];}}

intmain()

執行結果

TSP 旅行商問題 遺傳演算法

問題描述 對於n組城市座標,尋找最短路徑使其經過所有城市並回到起點。問題資料集 tsp.eil51問題1 37 52 2 49 49 3 52 64 4 20 26 5 40 30 6 21 47 7 17 63 8 31 62 9 52 33 10 51 21 11 42 41 12 31 32 ...

TSP 旅行商問題 模擬退火演算法

include include include include include include using namespace std define t0 50000.0 初始溫度 define t end 1e 8 define q 0.98 退火係數 define l 1000 每個溫度時的迭代...

C語言編寫遺傳演算法解決TSP旅行商問題

最近在上計算智慧型的課,老師剛剛教了遺傳演算法,布置了用遺傳演算法解決tsp的問題的作業,於是經過幾小時的奮戰,終於編寫完成。首先先對tsp問題進行分析。tsp問題,也就是旅行商問題,題目的大題內容是 一位旅行商,要遍遊n座城市 城市數量記為num city 已知每兩座城市之間的位置,要求每座城市必...