zoukankan      html  css  js  c++  java
  • Dijkstra最短路径算法实例

    #include <stdio.h>
    #include <stdlib.h>

    /* Dijkstra算法 */

    #define VNUM 5
    #define MV 65536

    int P[VNUM]; //保存最短路径
    int Dist[VNUM];
    int Mark[VNUM];
    int Matrix[VNUM][VNUM] =
    {
        {0, 10, MV, 30, 100},
        {MV, 0, 50, MV, MV},
        {MV, MV, 0, MV, 10},
        {MV, MV, 20, 0, 60},
        {MV, MV, MV, MV, 0},
    };

    void Dijkstra(int sv) // O(n*n)
    {
        int i = 0;
        int j = 0;
        //每个订点进行标识
        if( (0 <= sv) && (sv < VNUM) )
        {
            for(i=0; i<VNUM; i++)
            {
                Dist[i] = Matrix[sv][i];
                P[i] = sv;  //路径之前
                Mark[i] = 0;
            }
            
            Mark[sv] = 1;
            //寻找最短路径
            for(i=0; i<VNUM; i++)
            {
                int min = MV;
                int index = -1;
                
                for(j=0; j<VNUM; j++)
                {
                //寻找的订点不能被标记
                    if( !Mark[j] && (Dist[j] < min) )
                    {
                        min = Dist[j];
                        index = j;
                    }
                }
              
                if( index > -1 )
                {
                    Mark[index] = 1;
                }
                  //更新数组  
                for(j=0; j<VNUM; j++)
                {
                    if( !Mark[j] && (min + Matrix[index][j] < Dist[j]) )
                    {
                        Dist[j] = min + Matrix[index][j];
                        P[j] = index;
                    }
                }
            }
            //打印每次遍历的最短路径
            for(i=0; i<VNUM; i++)
            {
                int p = i;
                
                printf("%d -> %d: %d ", sv, p, Dist[p]);
                
                do
                {
                    printf("%d <- ", p);
                    p = P[p];
                } while( p != sv );
                
                printf("%d ", p);
            }
        }
    }

    int main(int argc, char *argv[])
    {
           Dijkstra(0);

        return 0;
    }

  • 相关阅读:
    adobe air ane 中有的java class 打包 apk 后却没有了报NoClassDefFoundError ,ClassNotFoundException
    厌烦了写findViewById 试试ButterKnife吧
    ios加载html5 audio标签用js无法自动播放
    一些css书写的小技巧
    canvas绘画基础(一):认识canvas画布
    H5新特性:video与audio的使用
    HTML5 进阶系列:文件上传下载
    h5移动端设备像素比dpr介绍
    HTML5 基础内容(元素/属性/格式化)
    前端如何将H5页面打包成本地app?
  • 原文地址:https://www.cnblogs.com/wxb20/p/6178131.html
Copyright © 2011-2022 走看看