C--最短路 oj
阿新 • • 發佈:2019-02-16
zmx
#include <stdio.h> #include <stdlib.h> #include <string.h> int n,m,i,k,s,e,check; int u[5000100],v[5000100],w[5010000]; //只能用bellman,因為資料較大 int dis[5000010]; //二維陣列會爆,spaf看不懂, #define INF 0x3f3f3f3f int main() //看的模板,不太明白 { while(scanf("%d%d",&n,&m) != EOF) { memset(u,0,sizeof(u)); memset(v,0,sizeof(v)); memset(w,0,sizeof(w)); memset(dis,INF,sizeof(dis)); for(i=1;i <= m;i++) { scanf("%d%d%d",&u[i],&v[i],&w[i]); //記錄道路資訊 } scanf("%d%d",&s,&e); dis[s] = 0; for(k = 0;k <= n-1;k++)//最差需要調整嗯-1次 { check = 0; // 標記變數 for(i = 0;i <= m;i++) { if(dis[v[i]]>dis[u[i]] + w[i]) { dis[v[i]] = dis[u[i]] +w[i]; check = 1; } if(dis[u[i]] > dis[v[i]] + w[i]) { dis[u[i]] = dis[v[i]] +w[i]; check = 1; } } if(check == 0) //調整結束, break; } printf("%d\n",dis[e]); } return 0; }