#include <iostream>
#include <limits>
using namespace std;
struct Node { //定义表结点
int adjvex; //该边所指向的顶点的位置
int weight;// 边的权值
Node *next; //下一条边的指针
};
struct HeadNode{ // 定义头结点
int nodeName; // 顶点信息
int inDegree; // 入度
int d; //表示当前情况下起始顶点至该顶点的最短路径,初始化为无穷大
bool isKnown; //表示起始顶点至该顶点的最短路径是否已知,true表示已知,false表示未知
int parent; //表示最短路径的上一个顶点
Node *link; //指向第一条依附该顶点的边的指针
};
//G表示指向头结点数组的第一个结点的指针
//nodeNum表示结点个数
//arcNum表示边的个数
void createGraph(HeadNode *G, int nodeNum, int arcNum) {
cout << "开始创建图(" << nodeNum << ", " << arcNum << ")" << endl;
//初始化头结点
for (int i = 0; i < nodeNum; i++) {
G[i].nodeName = i+1; //位置0上面存储的是结点v1,依次类推
G[i].inDegree = 0; //入度为0
G[i].link = NULL;
}
for (int j = 0; j < arcNum; j++) {
int begin, end, weight;
cout << "请依次输入 起始边 结束边 权值:
c++实现Dijkstra算法完整代码
最新推荐文章于 2024-08-19 12:02:02 发布
本文展示了如何使用C++实现Dijkstra算法,包括创建图、计算最短路径和打印路径的过程。通过创建头结点结构体和边结构体,实现了邻接表存储图,并用Dijkstra算法找出从特定顶点到所有其他顶点的最短路径。
摘要由CSDN通过智能技术生成