其实完全可以用邻接矩阵存储,那样更快也跟好理解,这个纯属老师布置的任务。
唯一难点就是初始化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;//图当