暴力法解決旅行商問題

2021-10-10 04:56:09 字數 1218 閱讀 2179

找出一條n個給定的城市間的最短路徑,使得我們在回到出發的城市之前,都經過了每個城市有且僅有一次。

下圖表示4個城市及其路徑的一張圖。

按照暴力法可以將所有的路線列出來,然後找出最佳的路線。

a->b->c->d->a distance=2+8+1+7=18

a->b->d->c->a distance=2+3+1+5=11 最佳

a->c->b->d->a distance=5+8+3+7=23

a->c->d->b->a distance=5+1+3+2=11 最佳

a->d->b->c->a distance=7+3+8+5=23

a->d->c->b->a distance=7+1+8+1=18

c++**實現

//旅行商問題

#include

"iostream"

using namespace std;

intmain()

,,,}

;int start;

int mindistance=

250;

//暫時給乙個最大的不可能通過計算而出現的距離當作無窮大

cout<<

"請輸入你選擇的起點:(0表示a,1表示b,2表示c,3表示d)"

<

cin>>start;

int min_i=0;

//三個用於儲存路徑名的變數

int min_j=0;

int min_k=0;

for(

int i=

0;i<

4;i++)

cout<

"->"

<

"->"

<

"->"

<

"->"

<

",distance="

<

}}cout<<

"最短路徑為:"

<

"->"

<

"->"

<

"->"

<

"->"

<

",distance="

<

distance<

return0;

}

旅行商問題(貪婪法)

h greedytsp.h created on 2011 7 12 author 哈哈 ifndef greedytsp h define greedytsp h include using namespace std include include void printstate vector ...

回溯法 旅行商問題

給定無向圖g n,e 含有n個結點,m條邊。現在有以下定義 有乙個商人從1號結點出發,希望經過每個結點一次回到起點,並且他希望走權值最小的一條路徑。輸入第一行2個整數n,m 接下來m行,每行三個數,u,v,w表示u,v結點有一條權值為w的無向邊。如果不存在這種路徑,列印 1 否則列印兩行。第一行乙個...

旅行商問題

旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...