笔记
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <set>
#include <map>
typedef long long ll;
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=25;
int n,m,min1=inf,e[maxn][maxn];
bool vis[maxn];
int a,b,c;
void dfs(int cur,int dis){
if(dis>min1)return ;
if(cur==n){
if(dis<min1)min1=dis;
return ;
}
for(int i=1;i<=n;i++){
if(e[cur][i]!=inf&&vis[i]==0){
vis[i]=1;
dfs(i,dis+e[cur][i]);
vis[i]=0;
}
}
return ;
}
int main(){
while(scanf("%d%d",&n,&m)==2){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)e[i][j]=0;
else e[i][j]=inf;
}
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
e[a][b]=c;
}
memset(vis,0,sizeof(vis));
dfs(1,0);
printf("%d\n",min1);
}
return 0;
}