c++全排列解旅行商问题的代码
时间: 2024-06-21 12:02:08 浏览: 115
C++中,可以使用STL中的next_permutation函数来实现全排列,再用一个循环来计算每个排列的路径长度,从而解决旅行商问题。
下面是一个简单的示例代码:
```
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n; // 城市数量
cin >> n;
// 建立城市编号的数组
vector<int> city(n);
for(int i = 0; i < n; i++) {
city[i] = i;
}
// 记录城市之间的距离
vector<vector<int>> distance(n, vector<int>(n));
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> distance[i][j];
}
}
int min_distance = INT_MAX; // 记录最小距离
do {
// 计算当前排列的距离
int current_distance = 0;
for(int i = 0; i < n - 1; i++) {
current_distance += distance[city[i]][city[i + 1]];
}
current_distance += distance[city[n - 1]][city]; // 回到起点
// 更新最小距离
min_distance = min(min_distance, current_distance);
} while(next_permutation(city.begin(), city.end())); // 使用next_permutation生成全排列
cout << min_distance << endl;
return 0;
}
```
阅读全文