floyd演算法多源有權最小路徑
需要兩個矩陣
D矩陣儲存距離,D[i][j] 儲存的就是 i 到 j 點的距離;
Path矩陣儲存路徑;
Floyd 演算法不能解決有負值圈的情況;
void Floyd(Graph G,int D[][Maxnum],int Path[][Maxnum])
{
int i, j, k;
for (i = 0; i < G->Nv; i++)
for (j = 0; j < G->Nv; j++)
{
D[i][j] = G->G[i][j]; // copy 儲存圖的矩陣,如果 i 到 j 沒有邊,G[i][j] 值為無窮大
Path[ i][j] = -1;
}
for (k = 0; k < G->Nv; k++)
for (i = 0; i < G->Nv; i++)
for (j = 0; j < G->Nv; j++)
if (D[i][j] < D[i][k] + D[k][j])
// 如果 i 到中間節點 k 的距離加上 k到 j 的距離小於 i 到 j 的距離
// 更新距離和路徑 , 經過 k 個節點 的 遞推,i 到 j 的距離必為最小值
{
D[i][j] = D[i][k] + D[k][j];
Path[ i][j] = k;
}
}
相關推薦
floyd演算法多源有權最小路徑
需要兩個矩陣 D矩陣儲存距離,D[i][j] 儲存的就是 i 到 j 點的距離; Path矩陣儲存路徑; Floyd 演算法不能解決有負值圈的情況; void Floyd(Graph G,int D[][Maxnum],int Path[][Maxnum]) { int i, j, k
最短路徑基本介紹(1)--Floyd演算法(多源最短路徑,五行程式碼)
我們來想一想,根據我們以往的經驗,如果要讓任意兩點(例如從頂點a點到頂點b)之間的路程變短,只能引入第三個點(頂點k),並通過這個頂點k中轉即a->k->b,才可能縮短原來從頂點a點到頂點b的路程。那麼這個中轉的頂點k是1~n中的哪個點呢?甚至有時候不只通過一個點,而是經過兩個點或
有權最短路徑問題:狄克斯特拉(Dijkstra)演算法 & Java 實現
一、有權圖 之前我們知道,在無權重的圖中,求兩個頂點之間的最短路徑,可以使用 廣度優先搜尋 演算法。但是,當邊存在權重(也可以理解為路程的長度)時,廣度優先搜尋不再適用。 針對有權圖中的兩點間最短路徑,目前主要有 狄克斯特拉演算法 和 貝爾曼福德演算法 兩種解決
有權最短路徑問題:貝文曼福德(Bellman Ford)演算法 & Java 實現
一、貝爾曼福德演算法 1. 簡介 貝爾曼福德(Bellman Ford)演算法也是求解單源最短路徑問題,相比狄克斯特拉(dijkstra)演算法,它執行效率會差一些,但是它可以處理邊的權重為負值的情況,而狄克斯特拉演算法要求變的權重不能為負數。 2. 演算法思
LeetCode : 743. 網路延遲時間(Network Delay Time)解答,有權最短路徑問題
743. 網路延遲時間 有 N 個網路節點,標記為 1 到 N。 給定一個列表 times,表示訊號經過 有向 邊的傳遞時間。 times[i] = (u, v, w),其中 u 是源節點,v 是目標節點, w 是一個訊號從源節點傳遞到目標節點的時間。 現在,我
單源有權圖的最短路徑 Dijkstra演算法(證明不能解決負權邊)7.1.2
單源最短路徑問題,即在圖中求出給定頂點到其它任一頂點的最短路徑。 Dijkstra演算法 假設存在G=<V,E>,源頂點為0,U={0+已確定的最短路徑頂點},dist[i]記錄頂點0到頂點i的最短距離(包括確定的和估算的),path[i]記錄從0到i路徑上的
演算法學習——動態規劃 例題:兩字串轉換權最小問題(java)
題目 : 給定兩個字串str1和str2,再給定三個整數ic,dc和rc,分別代表插入, 刪除和替換一個字元的代價。返回將str1編輯成str2的最小代價。比如,str1="abc",str2="adc",ic=5,dc=3,rc=2.從"abc"編輯成adc, 吧b替換成d是代價最小的所以返回
hdu4106 區間k覆蓋問題(連續m個數,最多選k個數) 最小費用最大流 建圖巧妙
編號 blog .cn cstring 題意 acm 不同 本質 span /** 題目:hdu4106 區間k覆蓋問題(連續m個數,最多選k個數) 最小費用最大流 建圖巧妙 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=410
poj2594最小路徑覆蓋+floyd
cte art his mem esp eof memory fun lang Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8909 Ac
Stream My Contest UVA - 11865(帶權最小樹形圖+二分最小值最大化)
mem bps fine int algo cstring bsp ont 二分 #include <iostream> #include <cstdio> #include <sstream> #include <cs
poj 2594 Treasure Exploration (floyd傳遞閉包+最小路徑覆蓋) (bitset優化floyd)
這道題為有向圖有相交邊的情況。。不能直接求最大匹配 先用floyd處理一下邊 // // main.cpp // wzazzy // // Created by apple on 2018/10/23. // Copyright © 2018年 apple. All rights r
POJ2594:Treasure Exploration(Floyd + 最小路徑覆蓋)
body bsp sent space p s form desc after floyd Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 9794
HDU 1385 Floyd+列印字典序最小路徑
Problem Description These are N cities in Spring country. Between each pair of cities there may be one transportation track or none. Now there is so
poj3268 Dijkstra演算法 邊既有權又有花費
題意: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 程式碼: #include<cstdio> #in
貪心演算法典型應用之——以最小前進次數到達陣列最後一個位置
1、題目說明: 輸入一個所有元素都是自然數的陣列,初始狀態你的位置位於第1個元素,每個元素的位置表示1步,當前所在位置的元素數值表示你下一次前進能夠移動的最大步數,你的目標是以最小的前進次數從陣列的第一個元素移動到陣列的最後一個元素位置,你需要輸出每次前進的步數。 2、舉例:
HDU 4738 Caocao's Bridges (橋的權最小)
Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn't give up. Caocao's army still was not good at water battles, so
夜深人靜寫演算法(十一)- 最小包圍球
一、前言 1、空間點集的最小包圍球 【例題1】三維空間中N(N&nbs
poj 2594 Treasure Exploration (floyd傳遞閉包+最小路徑覆蓋)
這道題為有向圖有相交邊的情況。。不能直接求最大匹配 先用floyd處理一下邊 // // main.cpp // wzazzy // // Created by apple on 2018/10/23. // Copyright © 2018年 apple. Al
【每日演算法】【圖論】【最小邊覆蓋 & 最小路徑覆蓋 & 最小頂點覆蓋 & 最大獨立集 & 最大團】
最小邊覆蓋 = 最大獨立集 = |V| - 最大匹配數 這個是在原圖是二分圖上進行的 最小路徑覆蓋和最小邊覆蓋不同,不要求給的圖是二分圖,而是要求是N x N的有向圖,不能有環,然後根據原圖構造二分圖,構造方法是將點一分為二,如,i分為i1和i2然後如果i和j有邊,那麼就在i
Floyd-Warshall 所有結點對的最短路徑演算法
以下程式碼僅支援結點是順序的,比如輸入5個結點,結點的編號只能是1到5,輸入順序可以不一致。 動態規劃真的簡潔,三個 for 把這麼複雜的東西就整理好了。 遞推公式:**d[i][j] = min ( d[i][j] , d[i][k] + d[k][j] )