zoukankan      html  css  js  c++  java
  • Dijkstra算法 1

     1 // Dijkstra算法,适用于没有负边的情况
     2 // 注意:是没有负边,不是没有负环
     3 // 在这一条件下,可以将算法进行优化
     4 // 从O(v*E)的复杂度,到O(V^2)或者是O(E*log(V))
     5 // 现在我们来看第一种O(V^2)的实现
     6 
     7 #include <cstdio>
     8 #include <iostream>
     9 
    10 using namespace std;
    11 
    12 const int max_N = 1000+2;
    13 const int max_E = 10000+2;
    14 const int INF = 1e9;
    15 // 这是一种很简单的实现方法
    16 // 图用临接矩阵来存储即可
    17 int cost[max_N][max_N];
    18 int d[max_N];
    19 bool used[max_N];
    20 int N,E;
    21 
    22 void dijkstra(int s)
    23 {
    24     fill(d,d+N,INF);
    25     fill(used,used+N,false);
    26     d[s]=0;
    27 
    28     while(true)
    29     {
    30         int v=-1;
    31         for(int i=0;i<N;++i)
    32         {
    33             if(!used[i] && (v==-1 || d[i]<d[v]))
    34             {
    35                 v=i;
    36             }
    37         }
    38 
    39         if(v==-1)
    40         {
    41             break;
    42         }
    43         used[v]=true;
    44         for(int i=0;i<N;++i)
    45         {
    46             if(d[i]>d[v]+cost[v][i])
    47             {
    48                 d[i]=d[v]+cost[v][i];
    49             }
    50         }
    51     }
    52 }
    53 
    54 int main()
    55 {
    56     scanf("%d %d",&N,&E);
    57     int a,b,c;
    58     for(int i=0;i<=N;++i)
    59     {
    60         for(int j=0;j<=N;++j)
    61         {
    62             cost[i][j]=INF;
    63         }
    64     }
    65     for(int i=0;i<E;++i)
    66     {
    67         scanf("%d %d %d",&a,&b,&c);
    68         cost[a][b]=c;
    69         cost[b][a]=c;
    70     }
    71 
    72     dijkstra(0);
    73 
    74     for(int i=0;i<N;++i)
    75     {
    76         printf("%d ",d[i]);
    77     }
    78     return 0;
    79 }
    80 
    81 
    82 /*
    83 7 10
    84 0 1 2
    85 0 2 5
    86 1 2 4
    87 1 3 6
    88 1 4 10
    89 2 3 2
    90 3 5 1
    91 4 5 3
    92 4 6 5
    93 5 6 9
    94 
    95 */
  • 相关阅读:
    Golang 读写文件的操作
    初始 Elasticsearch
    数据存储单位的换算(bytes、KB MB GB TB PB EB ZB YB DB NB)
    Go 语言类型元信息的通用结构 _type
    空接口
    HashMap和Hashtable的区别
    谈谈final, finally, finalize的区别
    理解AOP
    Struts2 OGNL概述
    Struts2原理
  • 原文地址:https://www.cnblogs.com/jishuren/p/12315835.html
Copyright © 2011-2022 走看看