思路:選取乙個頂點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...