目录
Dijkstra算法介绍
迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的。是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题。
迪杰斯特拉算法采用贪心算法的策略,将所有顶点分为已标记点和未标记点两个集合,从起始点开始,不断在未标记点中寻找距离起始点路径最短的顶点,并将其标记,直到所有顶点都被标记为止。需要注意的一点是该方法不能处理带有负权边的图。
总结一下:
迪杰斯特拉算法总共就干了两件事:
【1】不断运行广度优先算法找可见点,计算可见点到源点的距离长度
【2】从当前已知的路径中选择长度最短的将其顶点加入S作为确定找到的最短路径的顶点。
下面附上用C语言形式实现Dijkstra算法的算法核心部分
//Dijkstra visited数组来标记每个节点的状态,dis数组记录从源点到其他点的最短距离
// 采用邻接矩阵存储,**e数组存放的是图中各个节点之间的距离,n为节点数
#define INF 0Xfffffff
for(int i=0;i<n;i++){
int min_dis=INF; //记录到源点的最小距离
int min_index=-1; //记录最小距离的节点编号
for(int j=0;j<n;j++){
if(!visited[j] && dis[j]<min_dis){
min_dis=dis[j];
min_index=j;
}
}
visited[min_index]=1;
for(int k=0;k<n;k++){
if(dis[k]>dis[min_index]+e[min_index][k]){
dis[k]=dis[min_index]+e[min_index][k];
}
}
}
需要源码可以 加 我 Q
2369965526
系统展示
校园内不同地点
各点间路程
各点间时间
系统主界面
信息查询
最短路径查询
最快时间查询
插入中间点查询
联系我