• Dijkstra算法


     1 #include<iostream>
     2 using namespace std;
     3 typedef struct Graph
     4 {
     5     public :
     6         int visit[100];
     7         int map[100][100];
     8         int len[100];
     9         int v;
    10 }Graph;
    11 Graph G;
    12 void Init(int N, int M)
    13 {
    14     G.v = N;
    15     for(int i=1; i<=G.v; i++){
    16         G.visit[i] = 0;
    17         G.len[i] = 0;
    18         for(int j=1; j<=G.v; j++){
    19             G.map[i][j] = 999;
    20         }
    21     }
    22     
    23     int v1, v2, len;
    24     for(int i=0; i<M; i++){
    25         cin>>v1>>v2>>len;
    26         G.map[v1][v2] = len;
    27         G.map[v2][v1] = len;
    28         //cout<<G.map[v1][v2]<<endl;
    29     }
    30 }
    31 void Dijkstra(int V)
    32 {
    33     G.visit[V] = 1; // 标记原点已访问
    34     
    35     for(int i=1; i<=G.v; i++){//初始化各点到原点的距离 
    36         G.len[i] = G.map[i][V];
    37     }
    38     G.len[V] = 0;
    39     
    40     for(int n=1; n<G.v; n++){//循环 v-1 次,每次找到到已访问的点中最近的路径 
    41         int minlen = 999;
    42         int k;
    43         for(int i=1; i<=G.v; i++){
    44             // 每次找到未访问的最近的点 
    45             if(G.len[i] < minlen && G.visit[i] == 0){
    46                 minlen = G.len[i];
    47                 k = i;
    48             }
    49         
    50         }
    51         G.visit[k] = 1;// 标记已访问
    52         cout<<"K: "<<k<<endl;
    53         // 根据找到的最近的点更新到原点的距离 
    54         for(int i=1; i<=G.v; i++){
    55             if(G.visit[i] == 0 && G.len[i] > G.len[k] + G.map[k][i])
    56             G.len[i] = G.len[k] + G.map[k][i];
    57         } 
    58         
    59     }
    60 }
    61 int main()
    62 {
    63     // N 表示有几个点, M 表示有几条变, V 表示原点 
    64     int N, M, V;
    65     
    66     cin>>N>>M>>V;
    67     Init(N, M);
    68     Dijkstra(V);
    69     for(int i=1; i<=G.v; i++)
    70     cout<<G.len[i]<<" ";
    71 } 
    72 /* 测试实例 
    73 5 6 1
    74 1 2 14
    75 1 3 2
    76 1 4 6
    77 2 5 2
    78 3 4 3
    79 4 5 1
    80 */
  • 相关阅读:
    STM32cubemx-HAL库串口断线问题
    stm32 微秒定延时问题
    JLink OB SWI 取代串口打印的方式
    英特尔神经棒使用入门-NCS2 & NCS1 -OpenVino
    计算机组成原理-第4章-4.1
    计算机组成原理-第3章-3.5
    计算机组成原理-第3章-3.4
    计算机组成原理-第3章-3.3
    Tensorflow Chapter-6
    计算机组成原理-第3章-3.2
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/10581047.html
Copyright © 2020-2023  润新知