zoukankan      html  css  js  c++  java
  • 最短路之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];
              }
           }
     }
     

  • 相关阅读:
    关于body添加position:fixed会返回到网页顶部的问题
    微信个人信息的接口
    无缝滚动+定时器
    判断各种浏览器的内核和 移动端的类型
    laery.js提示层结束之后自动跳转到新页面
    支持火狐的文本超出隐藏以省略号显示
    多个列表同时进行倒计时
    记录制作人生第一把分体式键盘 ^.^
    NoSQLBooster for mac 破解(win同理)
    手机对应归属地规则
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/6653089.html
Copyright © 2011-2022 走看看