zoukankan      html  css  js  c++  java
  • 最短路之Dijkstra算法

    1. 邻接矩阵

     1 int cost[MAX_V][MAX_V]; //assume cost[u][v]>0
     2 int d[MAX_V];
     3 bool used[MAX_V];
     4 void Dijkstra(int s, int t, int V){
     5     for(int i=1; i<=V; i++)
     6         used[i]=false, d[i]=INT_MAX, pre[i]=0;
     7     d[s]=0;
     8     while(true){
     9         int u=-1;
    10         for(int v=1; v<=V; v++){
    11             if(!used[v]&&(u==-1||d[v]<d[u])) u=v;
    12         }
    13         if(u==-1||u==t) break;
    14         used[u]=true;
    15         for(int v=1; v<=V; v++){
    16             if(!cost[u][v]||used[v]) continue;
    17             if(d[v]>d[u]+cost[u][v])
    18                 d[v]=d[u]+cost[u][v], pre[v]=u;
    19         }
    20     }    
    21 }

    2.邻接表

     1 #define X first
     2 #define Y second
     3 typedef pair<int, int> pii;
     4 typedef vector<pii> vpii;
     5 vpii G[MAX_V];
     6 int d[MAX_V];
     7 bool used[MAX_V];
     8 void Dijkstra(int s, int t, int V){
     9     for(int i=1; i<=V; i++)
    10         used[i]=false, d[i]=INT_MAX, pre[i]=0;
    11     d[s]=0;
    12     while(true){
    13         int u=-1;
    14         for(int v=1; v<=V; v++){
    15             if(!used[v]&&(u==-1||d[v]<d[u])) u=v;
    16         }
    17         if(u==-1||u==t) break;
    18         used[u]=true;
    19         for(int i=0; i<G[u].size(); i++){
    20             int &v=G[u][i].X, &c=G[u][i].Y;
    21             if(used[v]) continue;
    22             if(d[v]>d[u]+c)
    23                 d[v]=d[u]+c, pre[v]=u;
    24         }
    25     }    
    26 }
  • 相关阅读:
    全选。取消
    Js获取下拉框的值和文本select
    回调函数
    js判断浏览器
    JS获取活动区域高和宽
    判断身份证
    Linux驱动架构之pinctrl子系统分析(一)
    Android的开机启动流程
    Android中getprop命令的使用
    C运算符优先级和结合性
  • 原文地址:https://www.cnblogs.com/Patt/p/4676402.html
Copyright © 2011-2022 走看看