这个算法可以解决负边,弥补了Dijkstra算法的不足
#include#define N 100#define inf 9999999int main(){ int a[N][N]; int n,m; //n是顶点的数量,m是边的数量 scanf("%d%d",&n,&m); int v[N],u[N],w[N]; int dis[N]; for(int i=1;i<=m;i++) { scanf("%d%d%d",&v[i],&u[i],&w[i]); } for(int i=0;i<=m;i++) dis[i]=inf; dis[1]=0; //把第一个点标记为0,也就是从1出发 for(int i=1;i<=n-1;i++) //循环n-1次 for(int j=1;j<=m;j++) //通过循环找到两个点的最小值 { if(dis[u[j]]>dis[v[j]]+w[j]) dis[u[j]]=dis[v[j]]+w[j]; } for(int i=1;i<=n;i++) { printf("%d ",dis[i]); } return 0;}