This commit is contained in:
e2hang
2025-09-16 23:10:48 +08:00
parent e9519e8558
commit 24522486f1
10 changed files with 249 additions and 0 deletions

View 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
*/