產生測試資料
import random as rd
n=eval(input('城市數量:'))
res=
for i in range(1,n):
for j in range(i+1,n+1):
f=open('input.txt','w')
f.write(str(n)+' '+str(len(res))+'\n')
for i in res:
f.write(str(i[0])+" "+str(i[1])+" "+str(i[2])+"\n")
f.close()
input('結束')
暴力法求解程式
#include#include#define n 100
#define big 99999
using namespace std;
double s[n][n];//距離矩陣
int m,n;//m代表座標點個數,n代表輸入行數
int temp[n];//迭代中的一組解
int res[n];//最終解
double dist=0;
void search(int k)
for(int i=1;i<=m;i++)
dist+=s[m][1];
for(int i=1;i<=m;i++)temp[i]=i;//初始化
for(int i=1;i<=m;i++)
search(1);
cout<<"距離:"<
模擬退火求解程式
#include#include#include#include#define n 109
#define big 9999999
using namespace std;
double nowdist(double d[n][n],int temp[n],int m)
for(int i=1;i<=m;i++)
dist+=d[m][1];
cout<<"初始距離: "(rand()%100)/100.0)else
t*=a;//降溫
}ct++;
if(ct>all)break;
} cout<<"當前最短距離:"<
TSP 模擬退火
都知道tsp是經典的np問題,從乙個點開始遍歷所有點,不重複,求最短路徑。可以用列舉終點,跑流量為2的最小費用,圖論來做,時間複雜度為 費用流已經用到堆優化了。顯然點,邊較多將無法承受。如果不要求精確解,使用模擬退火也是乙個不錯的選擇。模型簡單,轉移很暴力。先隨機生成一些解,然後隨機挑兩個點,開始試...
模擬退火求解TSP問題
1.尋找下乙個解 2.計算下乙個解的能量 3.決定是否接受這個解 4.降溫 double randfloat double t0 1000000 tk 1,t t0,d 0.9999 int x initx 當前解 初始解 int anse,nowe 全域性最優解的能量,當前解的能量 anse no...
模擬退火 解決 TSP 問題
tsp問題求解 n個城市之間有一定距離,現在讓選擇乙個城市出發,然後到達所有的城市,最後回到原點每個城市只到達一次,求出一條路徑並且求出最短的距離 tsp問題是乙個np問題,但是可以求近似解,通過模擬退火演算法實現,源 include include include include include ...