1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 #include <queue> 7 #define inf 0x3f3f3f3f 8 const int maxn = 200; 9 int n, m, pre[maxn], edge[maxn * maxn][3]; 10 int dist[maxn]; 11 bool relax(int u, int v, int c){ 12 if(dist[v] > dist[u] + c){ 13 dist[v] = dist[u] + c; pre[v] = u; 14 return true; 15 } 16 return false; 17 } 18 int bellman(int S){ 19 int i, j; 20 for(i = 0; i < n; i ++){ 21 dist[i] = inf; 22 pre[i] = -1; 23 } 24 dist[S] = 0; 25 bool flag; 26 for(i = 1;i < n; i ++){ 27 flag = false; 28 for(j = 0; j < m; j ++) 29 if(relax(edge[j][0], edge[j][1], edge[j][2])) flag = true; 30 if(!flag) break; 31 } 32 for(j = 0; j < m; j ++) 33 if(relax(edge[j][0], edge[j][1], edge[j][2])) return false; 34 return true; 35 }
时间: 2024-10-10 16:31:35