求解答:
在使用动态规划算法解决旅行商(TSP)问题出现错误,对于任何合法样例输入返回的都是INT_MIN值,即为 -2147483648。求找出源代码中的问题
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int solveTSP(const vector<vector<int>>& graph, int n) {
vector<vector<int>> dp(n, vector<int>((1 << n), INT_MAX));
dp[0][1] = graph[0][0]; // 初始化起点城市到自身的距离为0(如果需要从城市0出发再回到0,这里应设为0)
for (int mask = 1; mask < (1 << n); ++mask) {
for (int i = 0; i < n; ++i) {
if ((mask & (1 << i)) != 0) { // 检查i是否在mask中
for (int j = 0; j < n; ++j) {
if ((mask & (1 << j)) == 0) { // 检查j是否未被访问过(不在mask中)
// 更新dp数组,从所有已访问的城市i到未访问的城市j
dp[j][mask | (1 << j)] = min(dp[j][mask | (1 << j)], dp[i][mask] + graph[i][j]);
}
}
}
}
}
int result = INT_MAX;
for (int i = 0; i < n; ++i) {
result = min(result, dp[i][(1 << n) - 1]);
}
return result;
}
int main() {
int n;
cout << "Enter the number of cities (n): ";
cin >> n;
vector<vector<int>> graph(n, vector<int>(n, 0));
cout << "Enter the distance matrix:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> graph[i][j];
}
}
cout << "Best path: " << solveTSP(graph, n) << endl;
return 0;
}