解题思路:
/*
已知有5个城市和8条公路,我们可以用一个5*5的矩阵(二维数组)来存储这些信息
矩阵的数值表示两个城市的距离,其中无穷大(此处用9999999代替)表示两个城市
没法直接到达。同时一个城市自己和自己的距离是0.
*/
#include<iostream>
using namespace std;
int mins=9999999,book[100],n,e[100][100];
void dfs(int cur,int dis) //cur表示当前所在城市的编号,dis表示当前已经走过的路程
{
int j;
if(dis>mins)//如果当前走过的路程已经大于了之前的最短路径,那么久没有必要继续尝试
return ;
if(cur==n)//到达目标城市
{
if(dis<mins)
mins=dis;
return ;
}
for(j=1;j<=n;j++)
{
if(e[cur][j]!=9999999&&book[j]==0)
{
book[j]=1;
dfs(j,dis+e[cur][j]);
book[j]=0;
}
}
}
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]=9999999;//假设9999999为正无穷 ,表示两个点之间没有连线
}
}
//读入城市和城市之间的距离
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
e[a][b]=c;
}
book[1]=1;
dfs(1,0);//1表示当前所在城市,0表示当前走过的路程
cout<<mins<<endl;
return 0;
}