[2016-04-02][POJ][2387][Til the Cows Come Home]

Posted 红洋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2016-04-02][POJ][2387][Til the Cows Come Home]相关的知识,希望对你有一定的参考价值。

  • 时间:2016-04-02 10:34:36 星期六

  • 题目编号:[2016-04-02][POJ][2387][Til the Cows Come Home]

  • 题目大意:给定n个节点和t条路,求n到1的最短路长度

  • 分析:跑一次最短路即可

  • 遇到的问题:

    • 据说是多重边,如果是用邻接矩阵的就要更新最小值,
    • 此题是先输入t,再输入n,输入的时候读错,无限WA…
  1. #include <queue>
  2. #include <cstring>
  3. #include <cstdio>
  4. using namespace std;
  5. const int maxn = 1000 + 10;
  6. const int maxe = 2000 + 10;
  7. struct mNode{
  8. int u,c;
  9. mNode(int _u = 0,int _c = 0):u(_u),c(_c){}
  10. bool operator < (const mNode & a)const{
  11. return c > a.c;
  12. }
  13. };
  14. struct Edge{
  15. int v,c;
  16. Edge(int _v = 0,int _c = 0):v(_v),c(_c){}
  17. };
  18. vector<Edge> e[maxe];
  19. bool vis[maxn];
  20. int d[maxn];
  21. void Dijkstra(int s){
  22. memset(vis,0,sizeof(vis));
  23. memset(d,0x3f,sizeof(d));
  24. priority_queue<mNode> q;
  25. d[s] = 0;
  26. q.push(mNode(s,0));
  27. mNode tmp;
  28. while(!q.empty()){
  29. tmp = q.top();
  30. q.pop();
  31. int u = tmp.u;
  32. if(vis[u]) continue;
  33. vis[u] = 1;
  34. for(int i = 0;i < e[u].size();++i){
  35. Edge & me = e[u][i];
  36. if(!vis[me.v] && d[me.v] > d[u] + me.c){
  37. d[me.v] = d[u] + me.c;
  38. q.push(mNode(me.v,d[me.v]));
  39. }
  40. }
  41. }
  42. }
  43. inline void addedge(int u,int v,int c){
  44. e[u].push_back(Edge(v,c));
  45. }
  46. int main(){
  47. int n,t,a,b,c;
  48. scanf("%d%d",&t,&n);
  49. for(int i = 0;i < t; ++i){
  50. scanf("%d%d%d",&a,&b,&c);
  51. addedge(a,b,c);
  52. addedge(b,a,c);
  53. }
  54. Dijkstra(n);
  55. printf("%d\n",d[1]);
  56. return 0;
  57. }




以上是关于[2016-04-02][POJ][2387][Til the Cows Come Home]的主要内容,如果未能解决你的问题,请参考以下文章

POJ-2387(原始dijkstra求最短路)

POJ - 2387Til the Cows Come Home(最短路径 Dijkstra算法)

POJ 2387 链式前向星下的SPFA

解题报告:poj2387 dijkstra

水java试手—poj 2387

POJ 2387 Til the Cows Come Home