hiho_1081_最短路径1
题目
最短路模板题目,纯练习手速。
实现
#include<iostream>
#include<string.h>
#include<iostream>
#include<queue>
#include<cmath>
#include<unordered_map>
#include<unordered_set>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
const int inf = 1 << 29;
const int kEdgeMax = 20005;
const int kNodeMax = 1005;
struct Edge{
int to;
int dist;
int next;
Edge(int t=0, int d=0, int n=0) :to(t), dist(d), next(n){};
};
Edge gEdges[kEdgeMax];
int gEdgesIndex;
int gHead[kNodeMax];
int gDist[kNodeMax];
bool gVisited[kNodeMax]; struct Cmp{
bool operator()(const Edge& e1, const Edge& e2){
return e1.dist > e2.dist;
}
}; void InsertEdge(int u, int v, int d){
int e = gEdgesIndex++;
gEdges[e].to = v;
gEdges[e].dist = d;
gEdges[e].next = gHead[u];
gHead[u] = e;
}
//dijkstra 算法求最短路
int Dijkstra(int s, int t){
priority_queue<Edge, vector<Edge>, Cmp> pq;
gDist[s] = 0;
Edge e = Edge(s, 0, 0);
pq.push(e);
while (!pq.empty()){
e = pq.top();
pq.pop();
int cur_v = e.to;
if (gVisited[cur_v]){
continue;
}
if (cur_v == t){
break;
}
gVisited[cur_v] = true;
for (int eid = gHead[cur_v]; eid != -1; eid = gEdges[eid].next){
int next_v = gEdges[eid].to;
if (!gVisited[next_v] && gDist[next_v] > gDist[cur_v] + gEdges[eid].dist){
gDist[next_v] = gDist[cur_v] + gEdges[eid].dist;
pq.push(Edge(next_v, gDist[next_v], 0));
}
}
}
return gDist[t];
} void Init(){
memset(gHead, -1, sizeof(gHead));
memset(gVisited, false, sizeof(gVisited));
memset(gDist, 0x7F, sizeof(gDist));
gEdgesIndex = 0;
} int main(){
int n, m, s, t, u, v, d;
Init();
scanf("%d %d %d %d", &n, &m, &s, &t);
for (int i = 0; i < m; i++){
scanf("%d %d %d", &u, &v, &d);
InsertEdge(u, v, d);
InsertEdge(v, u, d);
}
int min_dist = Dijkstra(s, t);
printf("%d\n", min_dist);
return 0;
}
hiho_1081_最短路径1的更多相关文章
- Johnson 全源最短路径算法
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...
- Floyd-Warshall 全源最短路径算法
Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
- bzoj 4016: [FJOI2014]最短路径树问题
bzoj4016 最短路路径问题 Time Limit: 5 Sec Memory Limit: 512 MB Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点 ...
- 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
随机推荐
- laravel 重写以及500错误
http://www.golaravel.com/laravel/docs/5.1/ sudo chmod 755 -R laravel chmod -R o+w laravel/storage
- Radar之获取排列的UITexture数组
1.定义UITexture二维数组 public UITexture[,] m_UITexture; 2.在 void start() 中分配内存 m_UITexture = , ]; 3.遍历排列的 ...
- MVC 异步请求
<head> <meta name="viewport" content="width=device-width" /> <tit ...
- Oracle中如何使用REGEXP_SUBSTR函数
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcst ...
- C#语法基础用法Dictionary排序
Dictionary排序 1.先看效果图: 2.核心逻辑如下: Dictionary<int, string> list = new Dictionary<int, string&g ...
- Web自定义协议,BS端启动CS端,
实例 1.准备CS项目,windows窗体应用程序,拖进来一个label控件来接受BS的参数,并显示,右击生成,复制该文件的bin目录下的exe,例如放在以下路径,例如C:\\simu\\下, 2.编 ...
- Linux 在一个命令行上执行多个命令
Linux 在一个命令行上执行多个命令 1. [ ; ] 如果被分号(;)所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令. 2. [ && ] 如果命令被 &am ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- 基于jQuery的移动轮播图(支持触屏)
移动轮播图我看到两款, 一款是无线天猫的m.tmall.com,实现了无缝轮播. 一款是蘑菇街的,没有实现无缝轮播. 我自己重写一个,类似蘑菇街 <!doctype html> <h ...
- linux使用脚本自动连接数据库
脚本名: mtest1.sh #!/bin/bash # test connecting to the Mysql server MYSQL=`which mysql` $MYSQL test -u ...