shortest path : dijstra 、 Bellman 、 Floyd 、 SPFA
1. dijstra
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| int data[M][M]; int lowc[M]; int vis[M]; int n, m; void djst(int p) { int i, j; for(i = 1; i <= n; i++) { vis[i] = 0; lowc[i] = data[p][i]; } vis[p] = 1; for(i = 1; i <= n-1; i++) { int minc = INF, c = 0, lk; for(j = 1; j <= n; j++) { if(vis[j] == 0 && lowc[j] < minc) { minc = lowc[j]; c = j; } } if(c == 1) break; vis[c] = 1; for(j = 1; j <= n; j++) { if(vis[j] == 0 && data[c][j] + minc > 0 && data[c][j] + minc < lowc[j]) { lowc[j] = data[c][j] + minc; } } } cout << lowc[1] << endl; }
|
2. Bellman
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #define INF ((long long)(1))<<62 #define N 301 using namespace std; struct edge{ int u; int v; long long w; }e[N*N]; int m, n; long long d[1005]; bool bellman_ford(int s, int di) { int i, j; for(i = 1; i < n; i++) { d[i] = INF; } d[s] = 0; for(i = 1; i <= n-1; i++) { for(j = 1; j <= m; j++) { if(d[e[j].u] != INF && d[e[j].u]+e[j].w < d[e[j].v]) d[e[j].v] = d[e[j].u] + e[j].w; } } for(j = 1; j <= m; j++) { if(d[e[j].u] != INF && (d[e[j].v] > d[e[j].u]+e[j].w)) d[e[j].v] = -INF; } if(d[di] == INF || d[di] == -INF) return false; return true; }
|
3. Floyd
4. SPFA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| const int INF = 0x7fffffff; const int N = 5501; struct edge { int to; int w; }; vector<edge> p[N]; int d[N]; bool inque[N]; int cnt[N]; int n, m, q; bool SPFA(int s) { queue<int> Q; while(!Q.empty()) Q.pop(); int i; for(i = 0; i <= n; i++) { d[i] = INF; } d[s] = 0; memset(inque, 0, sizeof(inque)); memset(cnt, 0, sizeof(cnt)); Q.push(s); inque[s] = true; cnt[s]++; while(!Q.empty()) { int t = Q.front(); Q.pop(); inque[t] = false; for(i = 0; i < p[t].size(); i++) { int to = p[t][i].to; if(d[t] < INF && d[to] > d[t] + p[t][i].w) { d[to] = d[t] + p[t][i].w; cnt[to]++; if(cnt[to] >= n) { return false; } if(!inque[to]) { Q.push(to); inque[to] = true; } } } } return true; }
|
Checking if Disqus is accessible...