因为这个图是有向图,无向图和有向图代码很像,当这个图是无向图的时候,需要把输入的改成map[a][b]=c ,map[b][a]=c这样就是无向的,当他是无向图的时候最短路程不是1-2-5而是1-3-5
<span style="font-size:14px;">#include <iostream>
using namespace std;
int visit[101];
int map[101][101];
int n,m,a,b,c,cur;
int dis,min_=9999999;
void dfs(int cur,int dis)
{
int i;
if(dis>min_)//如果当前的距离比最小值大立马返回
return;
if(cur==n)//如果到达目的城市
{
if(min_>dis)
{
min_=dis;
}
return;
}
for(i=1;i<=n;i++)//从当前城市cur依次看到哪个城市可以走
{
if(map[cur][i]!=9999999 && visit[i]==0)
{
visit[i]=1;
dfs(i,dis+map[cur][i]);
visit[i]=0;
}
}
}
int main()
{
int i,j;
cin>>n>>m;//输入有n个城市编号1到n,共有m条路走
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=99999999;
}
}
for(j=0;j<m;j++)
{
cin>>a>>b>>c;
map[a][b]=c;
}
visit[1]=1;
dfs(1,0);
cout<<min_;
}
/*
5 8
1 2 2
1 5 10
2 3 3
2 5 7
3 1 4
3 4 4
4 5 5
5 3 3
*/inwi</span>