昨天讲了差分约束系统。。发现自己连BELLMAN-FORD都还不会。。。
今天看书 尝试搞了一个。。自己设计的小数据运行无误。。
#include <stdio.h> #define inf 1000000000 #define MAXN 8 int edge[MAXN][MAXN]; int dist[MAXN]; int prev[MAXN]; int n; int m; void addedge(int a, int b, int len) { edge[a][b]=len; } void bf(int src) { // for (int i=0; i<n; i++) { // dist[i]=edge[src][i]; // if(i!=src && dist[i]<inf) prev[i]=src; // else prev[i]=-1; // } dist[0]=0; for(int k=0; k<n; k++) { for(int u=0;u<n;u++) { if(u!=src) { for(int j=0; j<n; j++) { if(edge[j][u]<inf && dist[j]+edge[j][u] < dist[u]) { dist[u]=dist[j] + edge[j][u]; prev[u]=j; } } } } } } int a,b,len; int main() { scanf("%d",&n); for (int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(i==j) edge[i][j]=0; else edge[i][j]=inf; } dist[i]=inf; prev[i]=-1; } while (scanf("%d%d%d",&a,&b,&len),~a) { addedge(a,b,len); } bf(0); for(int i=0; i<n; i++) { printf("%d\n",dist[i]); int idx=prev[i]; //while(~idx) { // printf("%d ",idx); // idx=prev[idx]; //} putchar('\n'); } }