最短路之Dijkstra(迪杰斯特拉)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路之Dijkstra(迪杰斯特拉)相关的知识,希望对你有一定的参考价值。

一般用法:

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。重点-----》》》》注意该算法要求图中不存在负权边。

问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。(单源最短路径)

算法实现:

int map[110][110]; //图
int dis[110]; //记录下从起点到各点的最短距离
int visited[110]; //记录点是否存入

void Dijkstra(int n,int x) //起点为X,共有n个点
{
   int i,p,j,min;
   for (i=1;i<=n;i++) //初始化
   {
      dis[i]=map[x][i];
      visited[i]=0;
   }
   visited[x]=1;
   for (i=1;i<=n;i++)
   {
      min=INF;
      for (j=1;j<=n;j++)
      {
         if(!visited[j] && dis[j]<min) //找‘到已加入点‘的最小边
         {
            p=j;
            min=dis[j];
         }
      }
      visited[p]=1; //记录下遍历的点
      for (j=1;j<=n;j++)
      {
         if(!visited[j] && dis[p]+map[p][j]<dis[j])//更新从起点到该点的最短距离
         {
              dis[j]=dis[p]+map[p][j];
          }
       }
 }
 

以上是关于最短路之Dijkstra(迪杰斯特拉)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之最短路径 [迪杰斯特拉算法]

(王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想代码演示答题规范)

编写的迪杰斯特拉算法求最短路径,运行不正确?

最短路径 - 迪杰斯特拉(Dijkstra)算法

算法入门之单源最短路径算法:Dijkstra(迪杰斯特拉)算法

Dijkstra迪杰斯特拉算法