Time Limit: 3000MS | Memory Limit: 65536K | |||
Total Submissions: 50 | Accepted: 26 |
Description
Input
Output
Sample Input
Sample Output
解題報告:
#include<stdio.h> #include<string.h> #define inf 2000000000 #define M 5050 #define min(a,b) a<b?a:b int mp[M][M]; int n,m,a,b; int dis[M]; bool v[M]; void dijkstra() { int i; for(i=1;i<=n;i++) dis[i]=inf; dis[a]=0; memset(v,0,sizeof(v)); for(i=1;i<=n;i++) { int mark=-1; int mindis=inf; int j; for(j=1;j<=n;j++) { if(!v[j]&&dis[j]<mindis) { mindis=dis[j]; mark=j; } } v[mark]=j; for(j=1;j<=n;j++) if(!v[j]) dis[j]=min(dis[j],dis[mark]+mp[mark][j]); } } int main() { while(~scanf("%d%d%d%d",&n,&m,&a,&b)) { int i,j; int u,v,len; for(i=1;i<=n;i++) for(j=1;j<=n;j++) mp[i][j]=inf; for(i=1;i<=n;i++) mp[i][i]=0; for(i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&len); if(mp[u][v]>len) mp[u][v]=mp[v][u]=len; } dijkstra(); if(dis[b]==inf) printf("Impossible\n"); else printf("%d\n",dis[b]); } return 0; }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。