zoukankan      html  css  js  c++  java
  • Dijkstra单源点最短路径算法

    学习参考:

    Dijkstra算法(单源最短路径)

    最短路径—Dijkstra算法和Floyd算法

    使用的图结构:

    邻接矩阵:

    -1 20 -1 25 80
    -1 -1 40 -1 -1
    -1 -1 -1 -1 10
    -1 -1 20 -1 50
    -1 -1 -1 -1 -1

    代码:

     1     void Dijkstra(){//单源点最短路径
     2         int i,j;
     3         boolean s[]=new boolean[vexnum];
     4         int dist[]=new int[vexnum];
     5         int prev[]=new int[vexnum];
     6         int v=0;
     7         for(i=0;i<vexnum;i++){
     8             dist[i]=adjMatrix[v][i];
     9             s[i]=false;
    10             if(dist[i]>0){
    11                 prev[i]=v;
    12             }else{
    13                 prev[i]=-1;
    14             }
    15         }
    16         dist[v]=0;
    17         s[v]=true;
    18         for(i=1;i<vexnum;i++){
    19             int u=v;
    20             int min=0x7FFFFFFF;
    21             for(j=0;j<vexnum;j++){//把dist中的最小值加入S
    22                 if(s[j]==false && (dist[j]<min) && dist[j]!=-1){//j不在s中 ,j比最小值小
    23                     u=j;
    24                     min=dist[j];
    25                 }
    26             }
    27             s[u]=true;//结点u加入S中
    28             //利用结点u更新dist
    29             for(j=0;j<vexnum;j++){
    30                 if(s[j]==false && adjMatrix[u][j]!=-1){//j不在s中,并且u->j连通
    31                     int newdist=dist[u]+adjMatrix[u][j];//v->u + u->j
    32                     if(newdist<dist[j] || dist[j]==-1){
    33                         dist[j]=newdist;
    34                         prev[j]=u;
    35                     }
    36                 }
    37             }
    38         }
    39         //-1 0 3 0 2
    40         for(i=1;i<vexnum;i++){
    41             System.out.print(i);
    42             int t=prev[i];
    43             while(t!=-1){
    44                 System.out.print("<--"+t);
    45                 t=prev[t];
    46             }
    47             System.out.println();
    48         }
    49     }

     输出:

    1<--0
    2<--3<--0
    3<--0
    4<--2<--3<--0

    另外一个测试数据:

    可视化图结构:

    邻接矩阵:

    -1 -1 10 -1 30 100
    -1 -1 5 -1 -1 -1
    -1 -1 -1 50 -1 -1
    -1 -1 -1 -1 -1 10
    -1 -1 -1 20 -1 60
    -1 -1 -1 -1 -1 -1

    输出:

    1
    2<--0
    3<--4<--0
    4<--0
    5<--3<--4<--0

  • 相关阅读:
    js实现年月日三级联动
    Java_Web之俱乐部会员信息管理系统
    JQuery特效之心形图片墙
    Java_Web之宠物管理系统
    JavaScript特效之图片特效放大,缩小,旋转
    使用Ajax验证用户名
    Java_Web之神奇的Ajax
    js动态操作订单表格
    tab切换
    树型菜单
  • 原文地址:https://www.cnblogs.com/TQCAI/p/7637819.html
Copyright © 2011-2022 走看看