醉酒梦天下 2021-07-20 12:34 采纳率: 33.3%
浏览 36

Dijkstra算法求最短路径,每一行的解释及思路。


#include<bits/stdc++.h>
#define MAXN 100
#define INIT(arr,n) memset(arr,n,sizeof(arr));
using namespace std;
int n,m;
int path[MAXN];
int dist[MAXN];
int visit[MAXN];
int graph[MAXN][MAXN];
int x,y,z;
int start,finish;
void Dijkstra(int s)
{
    INIT(path,-1);INIT(dist,0x3f);INIT(visit,0);
    dist[s]=0;
    while(true)
    {
        int j=0;
        for(int i=1;i<=n;i++)
            if(!visit[i]&&dist[i]<dist[j])
                j=i;
        if(!j) return;
        visit[j]=1;
        for(int i=1;i<=n;i++)
            if(dist[i]>dist[j]+graph[j][i])
                dist[i]=dist[j]+graph[j][i],path[i]=j;
    }
}
void PrintPath(int finish)
{
    if(finish==-1) return;
    PrintPath(path[finish]);
    cout<<finish<<"->";
}
int main()
{
    cin>>n>>m;
    INIT(graph,0x7f);
    for(int i=0;i<m;i++)
        cin>>x>>y>>z,graph[x][y]=z,graph[y][x]=z;
    cin>>start>>finish;
    Dijkstra(start);
    cout<<dist[finish]<<endl;
    cout<<1;
    PrintPath(finish);
    
    return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 16:43
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 7月20日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题