这题直接用Dijkstra算法就行了,没什么难度。要注意T是路径数,N是顶点数,别弄反了。可能会有重边的情况不过,不过我用的邻接表,没什么影响。
代码

//Menory 412k  Time 110ms
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
int T,N;
class road
{public:int end;int weight;
};
class Graph
{public:int v;vector<road> *adj;int *mark;Graph(int n);~Graph();void addEdge(int s,int e,int w);
};
Graph::Graph(int n)
{v=n;adj=new vector<road>[n];mark=new int[n];for(int i=0;i<n;i++)mark[i]=0;
}
Graph::~Graph()
{delete []mark;delete []adj;
}
void Graph::addEdge(int s,int e,int w)
{road r;r.end=e;r.weight=w;adj[s].push_back(r);r.end=s;r.weight=w;adj[e].push_back(r);
}
class Dist
{public:int index;int length;int pre;friend bool operator<(const Dist & a,const Dist &b){return a.length>b.length;}
};
void Dijkstra(Graph & g,int s)
{Dist *D = new Dist[g.v];for(int i=0;i<g.v;i++){D[i].index = i;D[i].length=2147483647;D[i].pre = s;}D[s].length = 0;priority_queue<Dist> aqueue;aqueue.push(D[s]);for(int i=0;i<g.v;i++){Dist d;bool FOUND;FOUND=false;while(!aqueue.empty()){d=aqueue.top();aqueue.pop();if(g.mark[d.index]==0){FOUND=true;break;}}if(!FOUND)break;g.mark[d.index]=1;int node=d.index;vector<road>::iterator ii=g.adj[node].begin();for(;ii!=g.adj[node].end();ii++){if( D[ii->end].length> D[node].length + ii->weight){D[ii->end].length = D[node].length + ii->weight;D[ii->end].pre=node;aqueue.push(D[ii->end]);}}}cout<<D[0].length<<endl;               //输出结果
}
int main()
{int a1,a2,a3;cin>>T>>N;Graph g(5000);for(int i=1;i<=T;i++){cin>>a1>>a2>>a3;g.addEdge(a1-1,a2-1,a3);      //题目是从1开始,顶点减一从0开始}Dijkstra(g,N-1);
}

poj2387(Dijkstra)相关推荐

  1. POJ2387 Til the Cows Come Home -DIJKSTRA 练习

    题目大意是:有N个牛棚和T条边相连,每条边有个权值,问1号到N号牛棚之间的最短距离 本题是又是DIJKSTRA最短路水题,注意任何两个牛棚之间可能有多条路相连,输入时先输入边,再输入点,程序如下: # ...

  2. POJ-2387:Dijkstra模板题

    题目链接 AC代码: #include <stdio.h> #include <string.h> #include <string> #include <i ...

  3. [C] Dijkstra算法——通过边实现松弛

    Dijkstra算法--通过边实现松弛 本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径 这个时候你可能就要问了,为什么不 ...

  4. Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

    题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...

  5. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  6. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  7. Acwing--朴素dijkstra

    #include <iostream> #include <cstring> using namespace std;/* 优点:可以求得[n]到任一点的最短距离;可以输入最短 ...

  8. Dijkstra(迪杰斯特拉)算法简介

    目录 适用情形 思想 核心代码 设计实现更多功能 举例说明 适用情形 适用于权值为非负的图的单源最短路径 思想 在已知起点与终点的情况下.须有三个一维数组S,U,dis,S用于记录已经查找过的点,U则 ...

  9. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  10. 最短路径 - dijkstra

    dijkstra是单源点最短路算法. 借图: 其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合.一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知. 初始时,S中仅含有源.设u是G的 ...

最新文章

  1. 《程序员面试金典》合法括号判断
  2. 一份干货满满的PPT,答辩加分手到擒来!
  3. 《数据中台:让数据用起来》读书笔记
  4. Log4j2使用总结
  5. 严格对角占优矩阵特征值_电子科技大学矩阵理论复习笔记 第四章 特征值的估计...
  6. Postman 如何处理上一个接口返回值作为下一个接口入参?
  7. AlphaGo围棋 论文笔记
  8. 2020年华为鲲鹏产业体系研究深度报告
  9. 在系统编程ISP及在应用编程IAP
  10. FreeSWITCH对接MRCP Server
  11. Linux系统故障-MBR(主引导记录)被破坏的解决方法
  12. iOS下载APP之后直接跳转到信任界面
  13. kk_想要学习的知识
  14. 常用电源管理稳压IC
  15. python 偏态分布_峰度与偏度(python)
  16. c语言while输入n求n个奇数,任意输入n个整数,输出这n个数中的奇数个数和偶数个数.用while语句...
  17. 微信分享功能填坑过程
  18. 520表白html,html5 canvas全屏的520爱心表白网页代码
  19. 《orecal 数据库中文排序》
  20. Winbox配置PPPOE的参数

热门文章

  1. 税务会计实务【19】
  2. MATLAB 爬取配色css数据及渐变图
  3. 移动手机号神州行去香港购买境外流量包方法和注意事项
  4. OpenCV图像处理之直方图
  5. 如何抢到腾讯云校园1元优惠资格(新版腾讯云)-更新
  6. c++builder excel 插入分页符
  7. 短信平台API接口demo示例-JAVA/Message/XSend
  8. 微专题:数据中心选址
  9. appium自动化测试
  10. Java实现图片转pdf、pdf合并