HDU-1874(dijkstra求最短路)

来源:互联网 发布:淘宝推广方式钻石展位 编辑:程序博客网 时间:2024/04/30 08:13

很简单的一道基础题目,

需要注意的就是去重边,嘿嘿....

贴上代码:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#define inf 0x3fffffffint N,M;//N represents the number of points,and M donates the number of edges;int visit[210];int dis[210];int map[210][210];int sta,end;int dijkstra(){for(int i=0;i<N;i++){dis[i]=inf;}dis[sta]=0;for(int j=0;j<N;j++){int t=inf,pos;for(int i=0;i<=N;i++){if(!visit[i]&&t>dis[i]){t=dis[i];pos=i;}}visit[pos]=1;for(i=0;i<N;i++){if(!visit[i]&&dis[i]>map[pos][i]+dis[pos]&&map[pos][i]!=0x3f3f3f3f){dis[i]=map[pos][i]+dis[pos];}}}return dis[end];}int main(){while(scanf("%d%d",&N,&M)!=EOF){int a,b,val;memset(visit,0,sizeof(visit));memset(map,0x3f,sizeof(map));for(int i=0;i<M;i++){scanf("%d%d%d",&a,&b,&val);if(val<map[a][b]){map[a][b]=val;map[b][a]=val;}}scanf("%d%d",&sta,&end);int ans=dijkstra();if(ans==inf)printf("-1\n");elseprintf("%d\n",ans);}return 0;}


 

原创粉丝点击