• 最短路径 dijkstra


    最短路径 dijkstra

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <limits.h>
     4 
     5 #define MAX INT_MAX
     6 #define N    100
     7 
     8 int map[N][N];
     9 int len[N];
    10 int vis[N];
    11 int n;
    12 
    13 void build() {
    14 
    15     int i, j;
    16     int u, v, c;
    17     int m; 
    18     
    19     scanf("%d", &n);
    20     memset(map, -1, sizeof(map));
    21     scanf("%d", &m);
    22     while(m--) {
    23         scanf("%d%d%d", &u, &v, &c);
    24         map[u][v] = c;
    25     }
    26 
    27 //    scanf("%d", &s);
    28 }
    29 
    30 void dij() {
    31 
    32     int min;
    33     int i, t;
    34 
    35     memset(vis, 0, sizeof(vis));
    36     for(i = 0; i <= n; i++)
    37         len[i] = MAX;
    38     len[0] = 0;
    39 
    40     while(1) {
    41         min = n;
    42         for(i = 0; i < n; i++){
    43             if(vis[i]) continue;
    44             if(len[i] < len[min])
    45                 min = i;
    46         }
    47 
    48         if(min == n) break;
    49         printf("min = %d
    ", min);
    50         vis[min] = 1;
    51 
    52         for(i = 0; i < n; i++) {
    53             if(vis[i] || map[min][i] == -1) continue;
    54             t = len[min] + map[min][i];
    55             if(len[i] > t)
    56                 len[i] = t;
    57          }
    58     }
    59 
    60 }
    61 
    62 void show() {
    63 
    64     int i, j;
    65     for(i = 0; i < n; i++) {
    66         for(j = 0; j < n; j++)
    67             printf("%-5d", map[i][j]);
    68         printf("
    ");
    69     }
    70     printf("
    
    ");
    71 
    72     for(i = 0; i < n; i++)
    73         printf("%d, ", len[i]);
    74     printf("
    
    ");
    75 }
    76 
    77 
    78 int main(int argc, char const *argv[])
    79 {
    80     freopen("duan","r",stdin);
    81     build();
    82     dij();
    83     show();
    84 
    85     return 0;
    86 }
    87 /*
    88 6 8
    89 0 5 100
    90 0 2 10
    91 0 4 30
    92 1 2 5
    93 2 3 50
    94 3 5 10
    95 4 3 20
    96 4 5 60
    97 */
  • 相关阅读:
    [APIO2018] Duathlon 铁人两项
    「PKUWC2018」随机游走
    「2018山东一轮集训」 Tree
    「2018山东一轮集训」Game
    [Lydsy1805月赛] quailty 算法
    CodeForces
    CodeForces
    「2018山东一轮集训」鸽子
    python序列化
    python的shutil模块
  • 原文地址:https://www.cnblogs.com/firstrate/p/3253239.html
Copyright © 2020-2023  润新知