Altered
This commit is contained in:
52
Algorithm/DP-DynamicProgramming/Bitmask-DP/货郎担问题TSP.cpp
Normal file
52
Algorithm/DP-DynamicProgramming/Bitmask-DP/货郎担问题TSP.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
const int MAX = INT_MAX >> 1;
|
||||
int main(){
|
||||
//n <= 15, S<><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>15λ<35>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
int n;
|
||||
cin >> n;
|
||||
//<2F><>0<EFBFBD><30>ʼ
|
||||
vector<vector<int>> dist(n, vector<int>(n, 0));
|
||||
vector<vector<int>> dp(n, vector<int>(1 << n, MAX));//dp[i][S];
|
||||
int N = 1 << n; // 2 ^ n;
|
||||
for(int i = 0; i < n; i++){
|
||||
for(int j = 0; j < n; j++){
|
||||
cin >> dist[i][j];
|
||||
}
|
||||
}
|
||||
int start, end;
|
||||
cin >> start >> end;
|
||||
dp[start][1 << start] = 0;
|
||||
//S<><53><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
for(int mask = 0; mask < N; mask++){
|
||||
for(int j = 0; j < n; j++){
|
||||
if(dp[j][mask] == MAX || !(mask & (1 << j))) continue;
|
||||
|
||||
for(int v = 0; v < n; v++){
|
||||
if(mask & (1 << v)) continue;
|
||||
int new_mask = mask | (1 << v);
|
||||
//1001 | 0001 = 1001, 1001 ^ 0001 = 1000
|
||||
dp[v][new_mask] = min(dp[v][new_mask], dp[j][mask] + dist[j][v]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С·<D0A1><C2B7><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ϊ end<6E><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
||||
int full_mask = (1 << n) - 1; // <20><><EFBFBD>г<EFBFBD><D0B3>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int cost = dp[end][full_mask];
|
||||
if (cost == MAX) {
|
||||
cout << "No valid path" << endl; // û<>п<EFBFBD><D0BF><EFBFBD>·<EFBFBD><C2B7>
|
||||
} else {
|
||||
cout << cost << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
4
|
||||
0 10 15 20
|
||||
10 0 35 25
|
||||
15 35 0 30
|
||||
20 25 30 0
|
||||
0 3
|
||||
*/
|
||||
Reference in New Issue
Block a user