最短路径算法之Dijkstra算法
参考:《大话数据结构》
这是一个按照路径长度递增的次序产生最短路径的算法。它并不是一次求出源点到目标点的最短路径,而是一步步求出它们之间顶点的最短路径,过程中都是基于已经求出的最短路径的基础上,求得更远顶点的最短路径,最终得到想要的结果。
#define MAXVEX 9 #define INFINITY typedef int PathMatrix[MAXVEX] typedef int ShortPathTable[MAXVEX] void ShortestPath_Dijkstra(MGraph G, int v0, PathMatrix *p, ShortPathTable *D) { int v,w,k,min; int final[MAXVEX]; //final[w]=1表示求得顶点v0到vw的最短路径 for(v=0;v<G.numVertexes;v++) { final[v] = 0; //全部顶点初始化为未知最短路径状态 (*D)[v] = G.matrix[v0][v]; //将与v0点有连线的顶点加上权值 (*p)[v] = 0; //初始化路径数组p为0 } (*D)[v0] = 0; //v0至v0路径为0 final[v0] = 1; //v0至v0不需要求路径 /*开始主循环,每次求得v0到某个v顶点的最短路径*/ for(v=1;v<G.numVertexes;v++) { min = INFINITY; for(w=0;w<G.numVertexes;w++) //寻找离v0最近的顶点 { if(!final[w] && (*D)[w] < min) { k = w; min = (*D)[w]; } } } final[k] = 1; //将目前找到的最近的顶点置为1 for(w=0;w<G.numVertexes;w++) { if(!final[w] && (min + G.matrix[k][w])<(*D)[w]) //如果警告v顶点的路径比现在这条路径的长度短的话 { (*D)[w] = min + G.matrix[k][w]; (*p)[w] = k; } } }
标签:
Dijkstra算法
, 最短路径算法
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决