日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dijkstra(单源最短路算法)

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dijkstra(单源最短路算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

typedef struct gra{           ?//頂點
  int val;
  int weight;
}graph;
graph g[1005][1005],dist[1005];    //圖 ?和 ?最短路徑
int visit[1005];             //頂點是否已被訪問

void dijkstra(int start,int n){
  int min,u;
  for(int i=1;i<=n;i++){       //初始化最短路徑數組 和 訪問數組
    dist[i].val = MAXVAL;
    visit[i]=0;
  }
  for(int i=1;i<=n;i++){       //計算源點到各頂點的最短路徑
    if(g[start][i].val < MAXVAL){ 
      dist[i].val = g[start][i].val;
      dist[i].weight = g[start][i].weight;
    }
  }
  visit[start] = 1;          //設置源點已被訪問
  dist[start].val = 0;         //源點到源點的距離為0

  for(int i=1;i<=n;i++){      //計算n輪后最短路徑
    min = MAXVAL;
    u = 0;            
     for(int k=1;k<=n;k++){      ? ? ?//找出每一輪新的最短路徑的頂點
      if(visit[k]==0 && dist[k].val < min){
        min = dist[k].val;
        u = k;            //設置該頂點為新的起點
      }
    }
    visit[u] = 1;             //設置該頂點已被訪問
    for(int j=1;j<=n;j++){        //以新頂點為起點,更新最短路徑
      if(visit[j]==0 && dist[j].val > (dist[u].val + g[u][j].val)){//如果 源點到新起點的距離?加上?新起點到各點的距離,比 源點 到 各點 的距離短,更新最短路徑
        dist[j].val = dist[u].val + g[u][j].val;
        dist[j].weight = dist[u].weight + g[u][j].weight;
      }else if(visit[j]==0 && dist[j].val == (dist[u].val + g[u][j].val)){//如果距離相等,則選擇花費較小的路徑作為最短距離
        if(dist[j].weight > (dist[u].weight + g[u][j].weight)){
          dist[j].weight = dist[u].weight + g[u][j].weight;
        }
      }
    }
  }
}

轉載于:https://www.cnblogs.com/ruowei/p/5995160.html

總結

以上是生活随笔為你收集整理的Dijkstra(单源最短路算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。