// Created by ERGO_V on 2025/3/27.
#include <bits/stdc++.h>
using namespace std;
int N;
int matrix[17][17];
int vis[17];
int visland[17];
int minTime = 0;
bool flag = false;
void dfs(long time, int step, int current){
if(step + 1 == N){
if(flag == true && time + matrix[current][N] >= minTime){
return;
}
else{
minTime = matrix[current][N] + time;
flag = true;
}
}
for(int i = 2; i < N; i ++){
if(!vis[i]){
if(flag == true && time + matrix[current][i] >= minTime){
continue;
}
if(i == current)continue;
vis[i] = 1;
dfs(time + matrix[current][i], step + 1, i);
vis[i] = 0;
}
}
}
int main(){
ios::sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr);
cin >> N;
for(int i = 1; i <=N; i ++){
for(int j = 1; j <= N; j++){
cin >> matrix[i][j];
}
}
memset(vis, 0, sizeof(vis));
dfs(0, 1, 1);
cout << minTime << endl;
return 0;
}
0 回复
0 转发
1 喜欢
1 阅读



