迪杰斯特拉算法求最短路径(邻接表存储)

其实完全可以用邻接矩阵存储,那样更快也跟好理解,这个纯属老师布置的任务。

唯一难点就是初始化D[v]为v00到各个终点v的权值,两层遍历。注释写的很清楚。

//实验十一:用邻接表构建有向图,实现迪杰斯特拉算法,求最短路径:
//具体要求:
//1. 定义一个有向图类型(以邻接表表示图)。完成
//2. 定义一个函数:通过输入完成有向图的建立(邻接表表示)。完成
//3. 定义一个函数,实现Dijkstra算法
//4. 在main函数里调用2和3中的函数:先建立一个有向图,然后指定起始节点V0,最后输出V0  到其他节点之间的最短距离及路径

#include <bits/stdc++.h>
using namespace std;
#define MAXINT  655333


//用邻接表存储图    有向网!!!
#define MVNum  100//最大顶点数
typedef char VerTexType;//顶点的数据类型
typedef struct ArcNode//边结点
{
    int adjvex;//与该边结点相邻的结点(即所属的表头结点)在图中的位置,即数组下标
    struct ArcNode * nextarc;//   指向与表头结点邻接的下一条边的指针
    int weight;
}ArcNode;
typedef struct VNode//顶点信息,即表头结点
{
    VerTexType name;//表头顶点的名字
    ArcNode *firstarc;//指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum];//表头结点组成一个AdjList类型的数组
typedef struct
{
    AdjList vertices;//表头数组
    int vexnum;//图当
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值