演算法學習之Bellman Ford單源最短路問題

2021-07-10 12:07:18 字數 644 閱讀 3788

一.演算法分析

這個演算法的思路還是很清晰的,該演算法以邊作為主要研究物件。

首先我們考慮使用乙個邊,這邊用鄰接表類似的形式由u[i](儲存起始點)v[i](儲存終點)w[i](儲存邊長權值)來儲存,那麼是否可以通過這條邊來使的我們的起點到這條邊的終點的距離縮短呢?如果可以的話就縮短這個距離,如果不行的話就放棄,之後依照這個思路將所有的邊都遍歷一遍,然而這樣就結束了麼?當然不行!很容易就能想到這樣很可能找不出一套有效路徑,然而我們很容易就會發現,在已經產生一套最短路徑之前每一次遍歷都至少會誕生乙個點的最短路徑,那麼在用n-1次一定可以產生一套路徑的。

其實這個演算法的思路和之前的dijkstra很相似,只是dijkstra使用的是點來鬆弛其它點,而本演算法是實用邊來鬆弛其它點

//// main.cpp

// bellman=ford

//// created by 張嘉韜 on 16/3/14.

//#include #include using namespace std;

int const maxn=99999999;

int main(int argc, const char * argv)

for(int k=1;k<=n-1;k++)

}for(int i=1;i<=n;i++) cout<

演算法學習之插入演算法

插入演算法其實很簡單,其原理就像我們玩的撲克一樣 在桌子上放著一疊雜亂無序的撲克牌 相當於需要我們排序的初始化陣列 然後拿起第一張,放到左手上 只有一張,不需要排序的說 然後拿起第二張,從右往左進行比較大小,如果小,就放到第一張牌的左邊,如果大,就放到第一張牌的右邊 然後拿起第三張,同上,從右往左進...

演算法學習之演算法思想

演算法的英文名稱是algorithm,這個詞在1957年之前在webster s new world dictionary 韋氏新世界詞典 中還未出現,只能找到帶有它的古代涵義的較老形式的 algorism 算術 是指用阿拉伯數字進行算術運算的過程。在中世紀時,珠算家用算盤進行計算,而算術家用算術進...

演算法學習之素數

判斷是否是素數,素數又稱為質數,是大於1且除了本身沒有因數的自然數,如2,3,5,7,11等 演算法1 bool isprime int n int divisors,i divisors 0 for int i 1 i n i if n i 0 divisors return divisors 2...