1. 程式人生 > >貝爾曼福特演算法

貝爾曼福特演算法

//Bellman_ford
#include<iostream>
using namespace std;
struct Edge{
	int v,e,weight;
}a[1000];
int dist[1000];
int node,edge,source,i,j;
bool Bellman_ford()
{
    for(i=2;i<=node;i++)
	{
		for(j=1;j<=edge;j++)
		{
			if(dist[a[j].e]>dist[a[j].v]+a[j].weight)
			   dist[a[j].e]=dist[a[j].v]+a[j].weight;
		}
	}
	for(j=1;j<=edge;j++)
	{
		if(dist[a[j].e]>dist[a[j].v]+a[j].weight)
		return false;
	}	
	return true;
}
int main()
{
	cin>>node>>edge>>source;
	for(i=1;i<=edge;i++)
	dist[i]=9999;
	for(i=1;i<=edge;i++)
	{
	    cin>>a[i].v>>a[i].e>>a[i].weight;
	    if(source==a[i].v)
	    {
	    	dist[source]=0;
	    	dist[a[i].e]=a[i].weight;
	    }
	}
	if(Bellman_ford())
	{
		for(i=1;i<=edge;i++)
		cout<<dist[i]<<endl;
	}
	return 0;
}
/*
input :
5 5 1
1 2 10
2 3 50
3 5 10
1 5 100
1 4 30
output:
0
10
60
30
70
*/
/*
author Sunshine_小高 
*/

相關推薦

Bellman ford演算法·演算法

Bellman - ford演算法是求含負權圖的單源最短路徑的一種演算法,效率較低,程式碼難度較小。其原理為連續進行鬆弛,在每次鬆弛時把每條邊都更新一下,若在n-1次鬆弛後還能更新,則說明圖中有負環,因此無法得出結果,否則就完成。 問題集錦:

演算法

//Bellman_ford #include<iostream> using namespace std; struct Edge{ int v,e,weight; }a[1000]; int dist[1000]; int node,edge,source

演算法(五):圖解-演算法

演算法簡介 貝爾曼-福特演算法(Bellman–Ford algorithm )用於計算出起點到各個節點的最短距離,支援存在負權重的情況 它的原理是對圖進行最多V-1次鬆弛操作,得到所有可能的最短路徑。其優於迪科斯徹演算法的方面是邊的權值可以為負數、實現簡單,缺點是時

Bellman-ford(-演算法)解析

Dijkstra演算法是處理單源最短路徑的有效演算法,但它侷限於邊的權值非負的情況,若圖中出現權值為負的邊,Dijkstra演算法就會失效,求出的最短路徑就可能是錯的。 這時候,就需要使用其他的演算法來求解最短路徑,Bellman-Ford演算法就是其中最常用的一個。該

-(Bellman-Ford)演算法——解決負權邊(C++實現)

Dijkstra演算法雖然好,但是它不能解決帶有負權邊(邊的權值為負數)的圖。 接下來學習一種無論在思想上還是在程式碼實現上都可以稱為完美的最短路徑演算法:Bellman-Ford演算法。 Bellman-Ford演算法非常簡單,核心程式碼四行,可以完美的解決帶有負權邊的圖。 for(k

最短路徑 Floyd演算法 Dijkstra演算法 Bellman-Ford(演算法

相信大家應該對最短路徑演算法很感興趣吧!不感興趣也沒關係,我們一起來看看下面的例子。最短路徑應該是在眾多演算法中。最常用的一類演算法。為什麼這樣說呢?? 例如: 1.乘汽車旅行的人總希望找出到目的地的儘可能的短的行

有權最短路徑問題:德(Bellman Ford)演算法 & Java 實現

一、貝爾曼福德演算法 1. 簡介 貝爾曼福德(Bellman Ford)演算法也是求解單源最短路徑問題,相比狄克斯特拉(dijkstra)演算法,它執行效率會差一些,但是它可以處理邊的權重為負值的情況,而狄克斯特拉演算法要求變的權重不能為負數。 2. 演算法思

通俗理解卡濾波及其演算法實現(帶例項解析)

1.簡介(Brief Introduction) 在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人! 卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,1930年出生於

可夫與方程學習筆記

馬爾可夫決策的要求: 1,能夠檢測到理想狀態:比如我們想讓強化學習演算法來實現走迷宮,最後這個迷宮一定是可以走出的,倘若迷宮沒有出口便不可以套用馬爾可夫。 2,可以多次嘗試:依然使用走迷宮的例子,我們可以在走迷宮失敗的時候進行多次嘗試,而不是失敗以後就停止。 3,系

[轉]通俗理解卡濾波及其演算法實現(例項解析)

1.簡介(Brief Introduction)在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,19

通俗理解卡濾波及其演算法實現(例項解析)

1.簡介(Brief Introduction)在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,19

一個應用例項詳解卡濾波及其演算法實現

為了可以更加容易的理解卡爾曼濾波器,這裡會應用形象的描述方法來講解,而不是像大多數參考書那樣羅列一大堆的數學公式和數學符號。但是,他的5條公式是其核心內容。結合現代的計算機,其實卡爾曼的程式相當的簡單,只要你理解了他的那5條公式。在介紹他的5條公式之前,先讓我們來根據下面的例子一步一步的探索。假設我們要研究的

HDU 2512 一卡通大冒險(第二類斯林數+數)

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2512 題目大意:因為長期鑽研演算法, 無暇顧及個人問題,BUAA ACM/ICPC 訓練小組的帥哥們大部分都是單身。某天,他們在機房商量一個絕妙的計劃"一卡通大冒險"。這個計劃是由wf最先提出來的,計劃的內容是

簡單複習一下斯林數與

第一類斯特林數 S 1 (

深度學習 --- 隨機神經網路詳解(玻機學習演算法、執行演算法

BM網路的學習演算法 (1)  學習過程       通過有導師學習,BM網路可以對訓練集中各模式的概率分佈進行模擬,從而實現聯想記憶.學習的目的是通過調整網路權值使訓練集中的模式在網路狀態中以相同的概率再現.學習過程可分為兩個階段;第一階段

濾波演算法:卡濾波

這兩天學習了一些卡爾曼濾波演算法的相關知識。相比其它的濾波演算法,卡爾曼濾波在對計算量需求非常之低,同時又能達到相當不錯的濾波結果。 1. 演算法原理 網上看到一篇文章http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/對

十分鐘讀懂『卡濾波演算法

我是勤勞的搬運工,轉自: 1.http://blog.csdn.net/karen99/article/details/7771743 2.http://blog.csdn.net/tudouniurou/article/details/6277512 --------

濾波器的兩種python實現方法:(1)opencv自帶的cv2.KalmanFilter (2)pykalman演算法

預備知識: 卡爾曼濾波的理論知識: 具體的理論知識可參考以下博文,非常感謝相關博主的貢獻: 以一個滑鼠追蹤的任務分析兩種卡爾曼濾波的實現方式: (一)opencv自帶的cv2.KalmanFilter 該卡爾曼濾波器演算法分為兩個階段: 預測

第一類斯林數、第二類斯林數、數總結+模板

第一類斯特林數  解決問題:給n個元素,求出k個環排列的方法數  Stirling[n][k] 1 1      1 2      3       1 6      11      6       1

基於卡濾波演算法在三維球軌跡中跟蹤應用

關於卡爾曼濾波跟蹤演算法的理解文章實在太多,絕大多數都在敘述演算法原理和一些理解,而且一般舉例都限於一維直線運動或者二維平面運動,故在此不做過多的重複表述,有關原理理解性的文章請參考本部落格後的refe