#include<stdio.h>
int main()
{
freopen("data.in","r",stdin);
int dis[10],i,k,n,m,u[10],v[10],w[10];
int inf=999999;
scanf("%d%d",&n,&m);
//读入边
for(i=1;i<=m;i++)
scanf("%d%d%d",&u[i],&v[i],&w[i]);
//初始化
for(i=1;i<=n;i++)
dis[i]=inf;
dis[1]=0;
//Bellman-Ford算法核心语句
for(k=1;k<=n-1;k++)
for(i=1;i<=m;i++)
if(dis[v[i]]>dis[u[i]]+w[i])
dis[v[i]]=dis[u[i]]+w[i];
for(i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}
解二,优化
#include<stdio.h>
int main()
{
freopen("data.in","r",stdin);
int dis[10],bak[10],i,k,n,m,u[10],v[10],w[10],check,flag;
int inf=999999;
scanf("%d%d",&n,&m);
//读入边
for(i=1;i<=m;i++)
scanf("%d%d%d",&u[i],&v[i],&w[i]);
//初始化
for(i=1;i<=n;i++)
dis[i]=inf;
dis[1]=0;
//Bellman-Ford算法核心语句
for(k=1;k<=n-1;k++)
{
for(i=1;i<=n;i++)
bak[i]=dis[i];
//松弛
for(i=1;i<=m;i++)
if(dis[v[i]]>dis[u[i]]+w[i])
dis[v[i]]=dis[u[i]]+w[i];
check=0;
for(i=1;i<=n;i++)
if(bak[i]!=dis[i])
check=1;
if(check==0)
break;
}
flag=0;
for(i=1;i<=m;i++)
if(dis[v[i]]>dis[u[i]]+w[i])
flag=1;
if(flag==1)
printf("此图含有负权回路\n");
else
{
for(i=1;i<=n;i++)
printf("%d ",dis[i]);
}
return 0;
}