#include <stdio.h>
#include <stdlib.h>
#define INF 100000
int map[100][100];//存图
int book[100];//标记
int stack[100];//当前路径
int top=-1;
int step[100];//最短路径
int tops=-1;
int n,m;//点数和边数
int start,end;//起点和终点
int mindis=INF;
void dfs(int loc,int disnow)
{
if(disnow>mindis)
return;
if(loc==end){
if(disnow<mindis){
mindis=disnow;
for(int i=0;i<=top;i++)
step[i]=stack[i];
tops=top;
}
return;
}
for(int i=1;i<=n;i++){
if(book[i]==0&&map[loc][i]<INF){
book[i]=1;
stack[++top]=i;
dfs(i,disnow+map[loc][i]);
book[i]=0;
top--;
}
}
return;
}
int main()
{
scanf("%d%d",&start,&end);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j)
map[i][j]==0;
else
map[i][j]=INF;
}
for(int i=1;i<=m;i++){
int a,b,dis;
scanf("%d%d%d",&a,&b,&dis);
map[a][b]=dis;
}
book[start]=1;
stack[++top]=start;
dfs(start,0);
printf("%d\n",mindis);
for(int i=0;i<=tops;i++)
printf("%d ",step[i]);
return 0;
}
啊哈算法 城市地图(图的深度优先遍历)
原文作者:数据结构之图
原文地址: https://blog.csdn.net/ccdllyy/article/details/52828972
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/ccdllyy/article/details/52828972
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。