最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++ Bellman-Ford算法的具體實(shí)現(xiàn)

 更新時(shí)間:2021年06月28日 15:20:46   作者:即使敵眾我寡  
Bellman-Ford算法用于解決有邊數(shù)限制的最短路問題,且可以應(yīng)對(duì)有負(fù)邊權(quán)的圖,本文主要介紹了c++ Bellman-Ford算法的具體實(shí)現(xiàn),感興趣的可以了解一下

Bellman-Ford算法用于解決有邊數(shù)限制的最短路問題,且可以應(yīng)對(duì)有負(fù)邊權(quán)的圖

其時(shí)間復(fù)雜度為O(nm),效率較低

代碼實(shí)現(xiàn):

#include<iostream>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e4+10;
const int M=510;
int m,n,k,dis[M],backup[M];
//m條邊,n個(gè)點(diǎn),在1號(hào)點(diǎn)到n號(hào)點(diǎn)之間找到一條經(jīng)過小于等于k條邊的通路
//dis:各點(diǎn)到源點(diǎn)的距離,backup:備份 
struct Node
{
	int x,y,v;
}edge[N];//可以直接用結(jié)構(gòu)體存邊 
int Bellman_Ford()
{
    dis[1]=0;
	memset(dis,0x3f,sizeof dis);
	for(int i=1;i<=k;i++)
	{
		memcpy(backup,dis,sizeof dis);
		for(int j=1;j<=m;j++)
		{
			Node t=edge[j];
			dis[t.y]=min(dis[t.y],backup[t.x]+t.v);
		}
	}
	if(dis[n]>inf/2)	return -1; 
	return dis[n];
}
int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		edge[i]={a,b,c};
	}
	int ans=Bellman_Ford();
	if(ans==-1)		cout<<"impossible";
	else			cout<<ans;
	return 0;
 } 

對(duì)代碼中的重難點(diǎn)的解釋:

1.backup備份數(shù)組存在的意義:每一次“迭代”后,實(shí)現(xiàn)對(duì)dis數(shù)組的當(dāng)前狀態(tài)進(jìn)行保存

這里詳細(xì)解釋一下“迭代”的含義:此處的迭代即為從源點(diǎn)開始,對(duì)所到達(dá)的點(diǎn)的出邊進(jìn)行松弛

舉個(gè)例子:有一個(gè)如下的圖,1號(hào)點(diǎn)為源點(diǎn)

第一次迭代

找到2,3號(hào)點(diǎn)到源點(diǎn)的最短距離

第二次迭代

找到4,5號(hào)點(diǎn)到源點(diǎn)的最短距離

第三次迭代

由于所有邊都已被遍歷,沒有邊能夠被松弛,迭代結(jié)束

由剛才的過程可知,每一次迭代后要對(duì)dis數(shù)組進(jìn)行備份,若一直使用dis數(shù)組進(jìn)行運(yùn)算,程序則會(huì)失去迭代的控制(在代碼中迭代體現(xiàn)為Bellman-Ford函數(shù)中的外重循環(huán),題目要求最多經(jīng)過k條邊,實(shí)際上就是最多有k次迭代)

2.代碼的最后的判斷

為什么是if(dis[n]>inf/2),而不是if(dis[n]==inf)呢?

原因是Bellman-Ford算法可能處理含負(fù)權(quán)邊的圖,dis[n]可能會(huì)出現(xiàn)+∞-2這樣的數(shù)值,所以進(jìn)行大小比較判斷時(shí)條件只需要讓dis[n]大于一個(gè)同數(shù)量級(jí)的數(shù)(此處為inf/2)即可

到此這篇關(guān)于c++ Bellman-Ford算法的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)c++ Bellman-Ford內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié)

    VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié)

    本文主要介紹了VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C語言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng)

    C語言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c/c++單例模式類的混合編譯案例詳解

    c/c++單例模式類的混合編譯案例詳解

    ? 由于c語言中沒有類的概念,因此對(duì)于有類的cpp文件與c文件混合編譯時(shí),提供一個(gè)中間層提供類的操作接口,在c文件中調(diào)用接口實(shí)現(xiàn)間接操作類對(duì)象,這篇文章主要介紹了c/c++單例模式類的混合編譯的相關(guān)資料
    2022-10-10
  • C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng)

    C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 簡(jiǎn)單實(shí)現(xiàn)C語言2048游戲

    簡(jiǎn)單實(shí)現(xiàn)C語言2048游戲

    這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)C語言2048游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 實(shí)例講解C++編程中l(wèi)ambda表達(dá)式的使用

    實(shí)例講解C++編程中l(wèi)ambda表達(dá)式的使用

    這篇文章主要介紹了C++編程中l(wèi)ambda表達(dá)式的使用實(shí)例,lambda表達(dá)式特性的引入在C++11中可謂千呼萬喚始出來,非常重要,需要的朋友可以參考下
    2016-01-01
  • 解析C語言中結(jié)構(gòu)體struct的對(duì)齊問題

    解析C語言中結(jié)構(gòu)體struct的對(duì)齊問題

    這篇文章主要介紹了C語言中結(jié)構(gòu)體struct的對(duì)齊問題,作者深入到內(nèi)存分配方面來進(jìn)行解析,需要的朋友可以參考下
    2016-04-04
  • 簡(jiǎn)單總結(jié)C++中的修飾符類型

    簡(jiǎn)單總結(jié)C++中的修飾符類型

    這篇文章主要介紹了C++中的修飾符類型總結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-05-05
  • C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    在寫代碼的時(shí)候,我們經(jīng)常用到數(shù)組,那么有沒有想過數(shù)組名是什么呢?這篇文章主要給大家介紹了關(guān)于C語言數(shù)組與地址、數(shù)組名到底是什么的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表

    c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表

    這篇文章主要介紹了c++如何實(shí)現(xiàn)歸并兩個(gè)有序鏈表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

清水县| 霸州市| 虞城县| 巴林左旗| 晋中市| 扎兰屯市| 湘潭县| 沙河市| 布尔津县| 邵阳市| 乌审旗| 盐源县| 乐至县| 山东省| 安泽县| 广南县| 广丰县| 岳池县| 宝坻区| 金川县| 固安县| 郓城县| 马尔康县| 青冈县| 平顶山市| 博客| 固阳县| 淮安市| 繁昌县| 汶上县| 兴化市| 泉州市| 仙游县| 南宫市| 青龙| 昭通市| 陇南市| 秦安县| 沐川县| 浙江省| 于田县|