最短路問題(Bellman Ford演算法)

2021-07-08 17:12:51 字數 1160 閱讀 2581

思路:選取乙個頂點v作為起點,用陣列d[i],表示到該頂點到i頂點的最短路徑,那麼該點的最短路徑的d[v]=0為0.。然後從改點出發更新該點附近的最短路徑,需要注意的是,每次更新完的d[i]值並不一定就是最短路徑,因為可能存在其他路徑更短,例如從b到e的最短路徑為a->c->d->f->e,d[4]=11。但是從b點開始更新時d[4]=12.

所以需要進行多次更新,將前面不夠準確的值「覆蓋」.當無法更新時結束。具體大家可以自己演示體會。

1)將起點d[v]=0;

2)遍歷所有邊,把最短距離確定的頂點所連線的另乙個所有頂點dp[to]=min(d[to],d[from]+e.cost),最短距離更新

3)重複2)直到無法更新。

**如下:

#include #include #include #define max 1000

#define inf 100000

using namespace std;

typedef struct edge

edge;

edge es[max];

int d[max];

int v, e;

void shortest_path(int s)

} if (!updata) break; }}

void solve(int from,int to)

int main()

int from, to;

cin >> from >> to;

solve(from, to);

return 0;

}

7 10

0 1 2

0 2 5

1 0 2

1 2 4

1 3 6

1 4 10

2 0 5

2 1 4

2 3 2

3 1 6

3 2 2

3 5 1

4 1 10

4 5 3

4 6 5

5 3 1

5 4 3

5 6 9

6 4 5

6 5 9

0 616

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

最短路問題

簡單的最短路問題 includeconst int maxnum 1002 const int maxint 100005 void dijkstra int n,int v,int dist,int c maxnum maxnum dist v 0 s v 1 依次將未放入s集合的結點中,取dis...

最短路問題

time limit 5000ms memory limit 65536kb total submit 16 accepted 3 page view 402submit status discuss description 現在有n個城市,編號從1到n。現在已知從城市i到城市j需要走的時間為aij...