昨天讲了差分约束系统。。发现自己连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');
}
}
浙公网安备 33010602011771号