前言
迪杰斯特拉(dijisktra)算法是比较常用的最短路径算法之一,也是最为重要的,很多操作需要在它的基础上进行改动。在这里不对原理进行讲解,仅对代码进行提炼和总结,基础不是很好的同学还请自行翻阅《数据结构》教材。
注:本文的实验案例都是清华大学严蔚敏老师数据结构视频中所讲解的案例,所以本类的文章是十分适合大家对课上知识加深认识的。测试案例和源代码将会在文末给出。
算法
本算法的存储结构为邻接矩阵,类型声明如下:
typedef struct _graph {
int matrix[MAX][MAX];//二维数组表示的矩阵
char vexs[MAX];//顶点集
int vexnum;//顶点个数
int edgnum;//边的个数
}Graph, *pGraph;//邻接矩阵的存储结构,用pGraph指针指向
下面是算法
void DJS(Graph* pgra, char ch) {
int v0 = getPosition(pgra, ch);//得到该节点在邻接矩阵中的位置
int vexnum = pgra->vexnum;//顶点个数
bool* S = new bool[vexnum] {false};//S集,初始化为未选中
int* dist = new int[vexnum];//dist集合,存放的是到当前节点的路径
int* path = new int[vexnum];//到该节点最短路径的节点信息
S[v0] = true;//把该节点移除S集
dist[v0] = 0;
//初始化
for (int v = 0; v < vexnum; v++) {
dist[v] = pgra->matrix[v0][v];
if (dist[v] != INF) {//此时有路径
path[v] = v0;