回溯法 旅行商問題

2022-10-11 09:18:12 字數 964 閱讀 7142

給定無向圖g(n,e),含有n個結點,m條邊。現在有以下定義:

有乙個商人從1號結點出發,希望經過每個結點一次回到起點,並且他希望走權值最小的一條路徑。

輸入第一行2個整數n,m;

接下來m行,每行三個數,u,v,w表示u,v結點有一條權值為w的無向邊。

如果不存在這種路徑,列印 -1;

否則列印兩行。

第一行乙個整數代表最優值,第二行n+1個點表示路徑經過村莊的順序,若答案不唯一,列印任意乙個即可。

/*

3 31 2 2

1 3 4

2 3 10

161 2 3 1

*/#include #include using namespace std;

const int n = 10;

int n; // 圖g的頂點數

int x[n]; // 當前解

int bestx[n]; // 當前最優解

int a[n][n]; // 圖g的鄰接矩陣

int cc; // 當前費用

int bestc; // 當前最優值

int noedge; // 無邊標記

void backtrack(int i)

}else}}

}int main()

for(int i = 1; i <= n; i ++ ) x[i] = i;

backtrack(2);

cout << "最優值為:" << bestc << endl;

for(int i = 1; i <= n; i ++ )

cout << bestx[i] << " ";

cout << "1" << endl;

return 0;

}

旅行商問題(貪婪法)

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

旅行商問題

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

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...