算法设计与分析——使用dijkstra算法计算最短路径并且给出路径上的节点序列

本文介绍了一道算法作业题,要求在使用Dijkstra算法计算有向图中v1节点到其他所有节点的最短路径长度的同时,也能获取路径上的节点序列。通过初始化二维数组cost[][]、一维数组s[]和dist[],并在每次迭代中更新最短路径,最终得到最短路径长度和节点序列。作者自豪地分享了自己独立完成这一任务的经历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法课的一道作业题:

给定一个有向图,求v1到其他各节点的最短路径长度,以及最短路径。

要求:对dijkstra算法进行补充,使新算法在找出这些最短路径长度的同时,也能求出路径上的节点序列。

输入:一个有向带权图

这里写图片描述

输出的基本形式如下:

这里写图片描述

基本思路:

使用dijkstra计算v1节点到其他所有节点的路径长度:
二维数组cost[][]:存放有向带权图的初试状态;
一维数组s[]:bool类型,标记节点是否被选取;
一维数组dist[]:存放此轮迭代的最短路径,最后一轮迭代后,即为最终结果。
dist[i]=min{dist[i],dist[j]+cost[j][i]}

对于路径到的节点序列,新建一个path[]数组,每次更新路径长度时,更新path数组。
新的path[i]=path[j]+”vi”

//第一遍看代码的时候 可以忽略所有带有path的行,只看路径长度算法
//第二遍再看带有path的行,得到路径上的节点序列

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>

using namespace std;

void shortest_path(int n,int cost[101][101]){
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值