国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解)

這篇具有很好參考價(jià)值的文章主要介紹了弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

弗洛伊德算法,是一種用于尋找圖形中所有最短路徑的算法。它的基本思想是通過一定的規(guī)則逐步更新每個(gè)節(jié)點(diǎn)的最短路徑估計(jì)值,直到每個(gè)節(jié)點(diǎn)的最短路徑估計(jì)值收斂為止。

具體來說,弗洛伊德算法通過求解所有點(diǎn)對之間的最短路徑來實(shí)現(xiàn)。在算法開始時(shí),我們假設(shè)圖中的所有節(jié)點(diǎn)之間都是不聯(lián)通的,即它們之間的距離為無窮大。然后,我們對圖進(jìn)行“松弛”操作,即嘗試更新每個(gè)節(jié)點(diǎn)之間的距離估計(jì)值,以尋找更短的路徑。具體來說,對于圖中的每個(gè)節(jié)點(diǎn)對(i,j),我們檢查是否存在一個(gè)節(jié)點(diǎn)k,使得從i到k再到j(luò)的路徑比已知的最短路徑更短。如果是的話,我們就更新(i,j)之間的距離估計(jì)值為更短的路徑長度。

通過重復(fù)這個(gè)過程,我們最終得到了圖中所有節(jié)點(diǎn)之間的最短路徑估計(jì)值。弗洛伊德算法的時(shí)間復(fù)雜度為O(n^3),其中n是圖中節(jié)點(diǎn)的數(shù)量。

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

鄰接矩陣為

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

弗洛伊德算法

每次都選一個(gè)頂點(diǎn)作為中轉(zhuǎn)點(diǎn)

第一次將V0作為中轉(zhuǎn)點(diǎn)

對所有頂點(diǎn)i,j做判斷dist[i][j]>dist[i][k]+dist[k][j] (k為此時(shí)的中轉(zhuǎn)點(diǎn)

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

第二次將V1作為中轉(zhuǎn)點(diǎn)

再次對所有頂點(diǎn)i,j做判斷dist[i][j]>dist[i][k]+dist[k][j] (k為此時(shí)的中轉(zhuǎn)點(diǎn)

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

第三次將V2作為中轉(zhuǎn)點(diǎn)

對所有頂點(diǎn)i,j做判斷dist[i][j]>dist[i][k]+dist[k][j] (k為此時(shí)的中轉(zhuǎn)點(diǎn)

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

就得到了最終結(jié)果

下面我們來看一下代碼是如何實(shí)現(xiàn)的(c語言代碼實(shí)現(xiàn))

void floyd(int graph[n][n])//弗洛伊德求各頂點(diǎn)之間的最短路徑
{
	int dist[n][n];
	for (int i = 0; i < n; i++)//初始化距離矩陣
	{
		for (int j = 0; j < n; j++)
			dist[i][j] = graph[i][j];
	}
	for (int k = 0; k < n; k++)//逐一考慮每個(gè)頂點(diǎn)作為中間頂點(diǎn)
	{
		for (int i = 0; i < n; i++)//
		{
			for (int j = 0; j < n; j++)
			{
				if (dist[i][j] > dist[i][k] + dist[k][j])//k作為中間頂點(diǎn),可以縮短(i,j)的距離
					dist[i][j] = dist[i][k] + dist[k][j];
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (dist[i][j] != Max)
				printf("%d\t", dist[i][j]);
			else
				printf("Max");
		}
		printf("\n");
	}
}

完整測試代碼

#include<stdio.h>
#define Max 0xFFFF
#define n 3
void floyd(int graph[n][n])//弗洛伊德求各頂點(diǎn)之間的最短路徑
{
	int dist[n][n];
	for (int i = 0; i < n; i++)//初始化距離矩陣
	{
		for (int j = 0; j < n; j++)
			dist[i][j] = graph[i][j];
	}
	for (int k = 0; k < n; k++)//逐一考慮每個(gè)頂點(diǎn)作為中間頂點(diǎn)
	{
		for (int i = 0; i < n; i++)//
		{
			for (int j = 0; j < n; j++)
			{
				if (dist[i][j] > dist[i][k] + dist[k][j])//k作為中間頂點(diǎn),可以縮短(i,j)的距離
					dist[i][j] = dist[i][k] + dist[k][j];
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (dist[i][j] != Max)
				printf("%d\t", dist[i][j]);
			else
				printf("Max");
		}
		printf("\n");
	}
}
int main()
{
	int graph[n][n] = { {0,6,13},{10,0,4} ,{5,Max,0} };
	floyd(graph);
	return 0;
}

弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解),圖,1024程序員節(jié),算法,數(shù)據(jù)結(jié)構(gòu),c語言,排序算法,圖

?文章來源地址http://www.zghlxwxcb.cn/news/detail-713254.html

到了這里,關(guān)于弗洛伊德(Floyd)算法求個(gè)頂點(diǎn)之間最短路徑問題(詳解+圖解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 弗洛伊德(Floyd's)算法—解決最短路徑經(jīng)典算法

    弗洛伊德(Floyd's)算法—解決最短路徑經(jīng)典算法

    弗洛伊德算法(Floyd\\\'s algorithm)是一種用于解決圖中最短路徑問題的經(jīng)典算法。由美國計(jì)算機(jī)科學(xué)家羅伯特·弗洛伊德于1962年提出,該算法通過動態(tài)規(guī)劃的思想,在圖中尋找任意兩個(gè)節(jié)點(diǎn)之間的最短路徑,具有廣泛的應(yīng)用。本文將詳細(xì)介紹弗洛伊德算法的原理、實(shí)現(xiàn)細(xì)節(jié)以及應(yīng)用

    2024年02月04日
    瀏覽(19)
  • 大話數(shù)據(jù)結(jié)構(gòu)-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)

    大話數(shù)據(jù)結(jié)構(gòu)-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)

    ??最短路徑,對于圖來說,是兩頂點(diǎn)之間經(jīng)過的邊數(shù)最少的路徑;對于網(wǎng)來說,是指兩頂點(diǎn)之間經(jīng)過的邊上權(quán)值之和最小的路徑。路徑上第一個(gè)頂點(diǎn)為源點(diǎn),最后一個(gè)頂點(diǎn)是終點(diǎn)。 ??以如下無向圖為例: ??我們來計(jì)算下標(biāo)為0的頂點(diǎn),到其他頂點(diǎn)的最短路徑,首先定義

    2024年02月06日
    瀏覽(26)
  • 最短路徑——弗洛伊德算法

    最短路徑——弗洛伊德算法

    對于這類最短路徑問題,DIF算法也可以解決,只需要 定義一個(gè)二維數(shù)組 ,以 數(shù)組的橫坐標(biāo)作為有向網(wǎng)頂點(diǎn)的下標(biāo) , 循環(huán)n次 依次求解各個(gè)源點(diǎn)到其余頂點(diǎn)的最短路徑, 時(shí)間復(fù)雜度為O(n^3) 。 由于弗洛伊德算法求解該問題的的時(shí)間復(fù)雜度同為O(n^3),而且 思路簡單及代碼實(shí)現(xiàn)

    2024年01月23日
    瀏覽(20)
  • 弗洛伊德循環(huán)查找算法-原理

    弗洛伊德循環(huán)查找算法-原理

    本文靈感來自嗶哩嗶哩視頻? 視頻鏈接: 弗洛伊德循環(huán)查找算法 算法代碼(java) 弗洛伊德循環(huán)查找算法中第二次相遇的地方就是循環(huán)的起始點(diǎn),這個(gè)性質(zhì)的證明是基于數(shù)學(xué)的原理。這是因?yàn)樵诘谝淮蜗嘤鰰r(shí),慢指針 `slow` 和快指針 `fast` 已經(jīng)處于同一個(gè)循環(huán)內(nèi)。設(shè)鏈表起點(diǎn)到環(huán)

    2024年01月19日
    瀏覽(24)
  • 弗洛伊德算法(求最短路徑)

    弗洛伊德算法(求最短路徑)

    在一個(gè)加權(quán)圖中,如果想找到各個(gè)頂點(diǎn)之間的最短路徑,可以考慮使用弗洛伊德算法。 弗洛伊德算法既適用于無向加權(quán)圖,也適用于有向加權(quán)圖。使用弗洛伊德算法查找最短路徑時(shí),只允許環(huán)路的權(quán)值為負(fù)數(shù),其它路徑的權(quán)值必須為非負(fù)數(shù),否則算法執(zhí)行過程會出錯(cuò)。 弗洛

    2024年02月06日
    瀏覽(21)
  • 今天學(xué)習(xí)了弗洛伊德算法(floyed)

    我自己寫的模板 嘿嘿 Dijkstra算法SPFA算法但是我知道還有這些,但是今天是周末哎,我有點(diǎn)不想學(xué)了,我今天學(xué)的是比較差勁的一個(gè)算法(但是它好像比較好記?。?,改天再學(xué)其他比較好一點(diǎn)的算法加強(qiáng)自己 輸入 輸出 后言:提醒自己加權(quán)值是分題目來不同權(quán)值,不是像示例

    2024年02月11日
    瀏覽(22)
  • 力扣-202. 快樂數(shù)解析-弗洛伊德循環(huán)查找算法

    力扣-202. 快樂數(shù)解析-弗洛伊德循環(huán)查找算法

    題目鏈接 ? 使用代碼測試一下每一代數(shù)字? 可以發(fā)現(xiàn) 歸納一下這些簡單數(shù)字就可以發(fā)現(xiàn),對于任意一個(gè)非快樂數(shù),最終會進(jìn)入重復(fù)循環(huán), ···不難發(fā)現(xiàn),4即之后的結(jié)果就是新一輪循環(huán)。 那么我的第一個(gè)做法是檢測4出現(xiàn)的次數(shù) 如果4出現(xiàn)次數(shù)超過兩次, 那么就不是快樂數(shù) 感

    2024年01月20日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】最短路徑算法實(shí)現(xiàn)(Dijkstra(迪克斯特拉),F(xiàn)loydWarshall(弗洛伊德) )

    【數(shù)據(jù)結(jié)構(gòu)】最短路徑算法實(shí)現(xiàn)(Dijkstra(迪克斯特拉),F(xiàn)loydWarshall(弗洛伊德) )

    最短路徑問題 :從在帶權(quán)有向圖G中的某一頂點(diǎn)出發(fā),找出一條通往另一頂點(diǎn)的最短路徑,最短也就是沿路徑各邊的權(quán)值總和達(dá)到最小。 單源最短路徑問題:給定一個(gè)圖G = ( V , E ) G=(V,E)G=(V,E),求源結(jié)點(diǎn)s ∈ V s∈Vs∈V到圖 中每個(gè)結(jié)點(diǎn)v ∈ V v∈Vv∈V的最短路徑 針對一個(gè)帶權(quán)

    2024年02月04日
    瀏覽(31)
  • 【力扣熱題100】287. 尋找重復(fù)數(shù)(弗洛伊德的烏龜和兔子方法)

    【力扣熱題100】287. 尋找重復(fù)數(shù)(弗洛伊德的烏龜和兔子方法)

    刷一道力扣熱題100吧 難度中等 https://leetcode.cn/problems/find-the-duplicate-number/?envType=study-plan-v2envId=top-100-liked 一年半前做過這題,但是時(shí)間復(fù)雜度不夠?,F(xiàn)在重新學(xué)一下 主要是用到了弗洛伊德的烏龜和兔子方法 算法預(yù)覽: 初始化 :從兩個(gè)指針開始,“烏龜\\\"和\\\"兔子”,都指向第

    2024年02月05日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)第13周 :( 迪杰斯特拉最短路徑 + 弗洛伊德求最短路徑 + 歐拉回路 + Invitation Cards)

    【問題描述】 在帶權(quán)有向圖G中,給定一個(gè)源點(diǎn)v,求從v到G中的其余各頂點(diǎn)的最短路徑問題,叫做單源點(diǎn)的最短路徑問題。 在常用的單源點(diǎn)最短路徑算法中,迪杰斯特拉算法是最為常用的一種,是一種按照路徑長度遞增的次序產(chǎn)生最短路徑的算法。 在本題中,讀入一個(gè)有向圖

    2024年02月13日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包