0
点赞
收藏
分享

微信扫一扫

DFS解最短路径问题


//DFS解最短路径问题 

#include <iostream>
using namespace std;

const int INF=99999999;
int minn=INF;
int n,dist[105][105],book[105];

void dfs(int cur,int fin, int dis)
{
int j;
//一点点优化:如果本次查找的路径到此已经超过前面查找的最短路径总长,就不需要再继续了
if(dis>minn)
return;
if(cur==fin)//到达要查的城市
{
minn=min(dis,minn);
return;
}

for(j=1;j<=n;j++)//从1号城市到n号城市依次尝试看是否能通过j到达
{
if(dist[cur][j]!=INF&&book[j]==0)//判断当前城市cur到城市j是否有路,并判断城市j是否已经走过
{
book[j]=1;//标记已经走过
dfs(j, fin ,dis+dist[cur][j]);//从城市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) dist[i][j]=0; //到自己的距离为0
else dist[i][j]=INF; //距离为无限,默认到不了

//读入城市之间的距离
for(i=1;i<=m;i++)
{
cin>>a>>b>>c;
dist[a][b]=c;
dist[b][a]=c;
}

for (int i= 1; i <= n; i++) {
for (int j = 1; j <= n; j++){
book[i]=1;
dfs(i, j, 0);
printf("城市%d到城市%d的最短距离是:", i, j);
cout<<minn<<endl;
minn = INF;
book[i]=0;
}
}
return 0;
}


举报

相关推荐

0 条评论