在大神的博客上看了一些思路,然后再再看书整理一下思路,总结了一下算法,也慢慢能写出一些东西,但是还是wa可是还是很多数据结构没有处理好所以我就直接贴了
#include <iostream> using namespace std; #define inf 1<<29 #define MAXM 2005 #define MAXV 1005 typedef struct{ int a,b,w; }Edge; Edge edge[MAXM]; int n,m; void bellman_ford(){ int i,j; int d[MAXV]; for(i=2;i<=n;i++) d[i]=inf; d[1]=0; for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if(d[edge[j].a]>edge[j].w+d[edge[j].b]) d[edge[j].a]=edge[j].w+d[edge[j].b]; if(d[edge[j].b]>edge[j].w+d[edge[j].a]) d[edge[j].b]=edge[j].w+d[edge[j].a]; } } printf("%d ",d[n]); } int main(){ int i,a,b,c; while(~scanf("%d%d",&m,&n)){ for(i=1;i<=m;i++){ scanf("%d%d%d",&a,&b,&c); edge[i].a=a; edge[i].b=b; edge[i].w=c; } bellman_ford(); } return 0; }