HDU 2544 最短路 Dijkstra

末蓝、 2022-06-10 04:49 243阅读 0赞

滴,集训第二十四天打卡。

今天是图论基础,除了并查集是之前在TOJ做过的,其他对我而言都是新题目呀…

这里放一题最短路,等会转一篇大佬的各种最短路模板。

HDU 2544 最短路

20170810135455209

代码用的是最普通的Dijkstra算法。

  1. #include<stdio.h>
  2. #include<string.h>
  3. const int N=105, INF=9999999;
  4. int d[N], w[N][N],vis[N],n,m;
  5. void Dijkstra(int src)
  6. {
  7. int i,j,u,tmp;
  8. for(i=1;i<=n;i++)
  9. d[i]=INF;
  10. d[src]=0;
  11. memset(vis, 0, sizeof(vis));
  12. for(i=1;i<=n;i++)
  13. {
  14. u=-1;
  15. for(j=1;j<=n;j++)
  16. {
  17. if(!vis[j])
  18. {
  19. if(u==-1||d[j]<d[u])
  20. u=j;
  21. }
  22. }
  23. vis[u]=1;
  24. for(j=1;j<=n;j++)
  25. {
  26. if(!vis[j])
  27. {
  28. tmp=d[u]+w[u][j];
  29. if(tmp<d[j])
  30. d[j] = tmp;
  31. }
  32. }
  33. }
  34. }
  35. int main()
  36. {
  37. int a,b,c,i,j;
  38. while(scanf("%d%d",&n,&m))
  39. {
  40. if(n==0&&m==0)break;
  41. for(i=1;i<=n;i++)
  42. {
  43. w[i][i]=INF;
  44. for(j=i+1;j<=n;j++)
  45. w[i][j]=w[j][i]=INF;
  46. }
  47. for(i=0;i<m;i++)
  48. {
  49. scanf("%d%d%d",&a,&b,&c);
  50. w[a][b]=w[b][a]=c;
  51. }
  52. Dijkstra(1);
  53. printf("%d\n",d[n]);
  54. }
  55. return 0;
  56. }

发表评论

表情:
评论列表 (有 0 条评论,243人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 2544 短路 Dijkstra

    滴,集训第二十四天打卡。 今天是图论基础,除了并查集是之前在TOJ做过的,其他对我而言都是新题目呀... 这里放一题最短路,等会转一篇大佬的各种最短路模板。 HDU 25