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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

[C] [最短路] 只有5行的算法:Floyd-Warshall

發布時間:2023/11/27 生活经验 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C] [最短路] 只有5行的算法:Floyd-Warshall 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

終于學到求最短路了,終于來到我最喜歡的算法——Floyd-Warshall了!今天還有點小激動呢!
我喜歡它,當然是因為它邏輯十分簡單咯!真的只有5行誒!

Floyd-Warshall算法

題目描述

暑假,小哼準備去一些城市旅游。有些城市之間有公路,有些城市之間則沒有,如下圖。為了節省經費以及方便計劃旅程,小哼希望在出發之前知道任意兩個城市之前的最短路程。




核心思想

對于一個用鄰接矩陣存好的圖,對于每一個點,將它作為轉車點,然后再對每個點進行遍歷,如果距離小于轉機(直走還不如轉車的情況下)就更新這段“直走”的值。


核心代碼:

    //快樂的Floyd-Warshall核心語句for (k = 1; k <= n; k++) //k是被中轉的點for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)if (a[i][j] > a[i][k] + a[k][j])a[i][j] = a[i][k] + a[k][j];

完整代碼:

#include<stdio.h>
int a[2000][2000];
int inf = 99999999;
int main()
{int i, j, k, m, n, x, y, s;scanf("%d %d", &n, &m);/* *///初始化for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)if (i == j)a[i][j] = 0;elsea[i][j] = inf;//讀入邊(有向圖)for (i = 1; i <= m; i++){scanf("%d %d %d", &x, &y, &s);a[x][y] = s;}printf("原地圖:\n");for (i = 1; i <= n; i++){for (j = 1; j <= n; j++){printf("%9d ", a[i][j]);}printf("\n");}//快樂的Floyd-Warshall核心語句for (k = 1; k <= n; k++) //k是被中轉的點for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)if (a[i][j] > a[i][k] + a[k][j])a[i][j] = a[i][k] + a[k][j];printf("Floyd-Warshall邊松弛結果:\n");for (i = 1; i <= n; i++){for (j = 1; j <= n; j++){printf("%9d ", a[i][j]);}printf("\n");}return 0;
}

運行結果:

總結

以上是生活随笔為你收集整理的[C] [最短路] 只有5行的算法:Floyd-Warshall的全部內容,希望文章能夠幫你解決所遇到的問題。

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