图的深度优先遍历
#include<stdio.h>
#include<iostream>
using namespace std;
int Min=999999,book[101],n,e[1010][101];
//cur是当前所在城市的编号,dis是当前已经走过的距离
void dfs(int cur,int dis){
int j;
if(dis>Min) return;//如果当前走过的路已经大于之前的最短路,则没必要再继续
if(cur==n){//是否到达目的地
if(dis<Min) Min=dis;
return;
}
for(j=1;j<=n;j++){//依次尝试
if(e[cur][j]!=999999&&book[j]==0){
book[j]=1;
dfs(j,dis+e[cur][j]);
book[j]=0;
}
}
return;
}
int main(){
int i,j,m,a,b,c;
cin>>n>>m;
//初始化二维矩阵
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) e[i][j]=0;
else e[i][j]=999999;
//读入城市之间的距离
for(i=1;i<=m;i++){
cin>>a>>b>>c;
e[a][b]=c;
}
//从一号开始出发
book[1]=1;
dfs(1,0);
cout<<Min;
}