生活随笔
收集整理的這篇文章主要介紹了
旅行商问题搜索求解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
某售貨員要到若干城市去推銷商品,已知各城市之間的路程(旅費),他要選定一條從駐地出發,經過每個城市一遍,最后回到駐地的路線,使總的路程(總旅費)最小。
輸入
輸入第一行為一個整數n,表示圖的頂點數
輸入第二行為一個整數k,表示圖的邊數
輸入第3到k+3-1行表示邊的信息,每一行三個數,分別表示頂點i,頂點j,i到j的路徑長度a[i][j]
4
6
1 2 30
1 3 6
1 4 4
2 3 5
2 4 10
3 4 20
輸出
輸出有兩行
第一行為最優值,表示旅行商的最短路徑長度
第二行為最優解,為旅行商的頂點遍歷序列
25
1 3 2 4 1
int n
;
double dist
[N
][N
];
double shortestPath(vector
<int>&path
,vector
<bool>&visited
,double currentLength
){if(path
.size() == n
)return currentLength
+= dist
[path
[0]][path
.back()];double ret
= INF
;for(int next
= 0;next
<n
;++next
){if(visited
[next
])continue;int here
= path
.back();path
.push_back(next
);visited
[next
] = true;double cand
= shortestPath(path
,visited
,currentLength
+dist
[here
][next
]);ret
+= min(ret
,cand
);visited
[next
] = false;path
.pop_back();}return ret
;
}
總結
以上是生活随笔為你收集整理的旅行商问题搜索求解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。