3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
2 -1
spfa简直无解。。。。
#include <iostream> #include <cstdio> #include <cstring> #include<algorithm> #define max0 100000000 using namespace std; int cc[250][250],dl[100000],dis[250]; bool vis[250]; void spfa(int s,int e,int n) { int r=0; memset(vis,1,sizeof(vis)); for(int i=0;i<250;i++) dis[i]=max0; dis[s]=0; dl[r++]=s; while(r) { int x=dl[--r]; vis[x]=1; for(int i=0;i<n;i++) { if(cc[x][i]+dis[x]<dis[i]) { dis[i]=cc[x][i]+dis[x]; if(vis[i]) { dl[r++]=i; vis[i]=0; } } } } if(dis[e]==max0)printf("-1\n"); else printf("%d\n",dis[e]); } int main() { int n,m; while(cin>>n>>m) { for(int i=0;i<250;i++) for(int j=0;j<250;j++) if(i!=j)cc[i][j]=max0;else cc[i][j]=0; for(int i=0;i<m;i++) { int a,b,c; cin>>a>>b>>c; if(c<cc[a][b]) cc[a][b]=cc[b][a]=c; } int st,ed;cin>>st>>ed; if(st==ed) printf("0\n"); else spfa(st,ed,n); } return 0; }