普通dijkstra,复杂度O(n*n)

#include<bits/stdc++.h>
using namespace std;
int n,m,f[105][105],dis[105];
bool b[105]; //n为总共的点数,m为路径数,f数组记录两个点的距离,dis数组记录每个点到原点的距离
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int aa,bb,cc;
scanf("%d%d%d",&aa,&bb,&cc);
f[bb][aa]=f[aa][bb]=cc;
}
memset(dis,1,sizeof(dis));
dis[1]=0;
for(int i=1;i<=n;i++)
if(f[1][i]) dis[i]=f[1][i]; //将刚开始与1点连接的点路径记录
for(int i=1;i<=n;i++){
int k=0;
int mn=2<<29; //一个大数
for(int j=1;j<=n;j++){
if(!b[j] && dis[i]+f[i][j]<mn && f[i][j]){
mn=dis[i]+f[i][j]; //记录最短点和路径
k=j;
}
}
if(k==0) break;
b[k]=1;
dis[k]=mn;
for(int j=1;j<=n;j++)
if(dis[k]+f[k][j]<dis[j] && f[k][j]) //更新其余点
dis[j]=dis[k]+f[k][j];
}
printf("%d",dis[n]);
}

堆优化,复杂度O(mlog(n))。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue> using namespace std;
const int MAXN = 10005,MAXM = 500005; struct Edge{
int nxt,to,v;
}edge[MAXM]; int n,m,st,cnt,head[MAXN],dis[MAXN];
bool vis[MAXN]; struct cmp{
bool operator()(int x,int y){
return dis[x]>dis[y];
}
}; inline void add(int bg,int ed,int w){
edge[++cnt].to=ed;
edge[cnt].v=w;
edge[cnt].nxt=head[bg];
head[bg]=cnt;
} inline void dijkstra(){
priority_queue<int,vector<int>,cmp> q;
memset(dis,0x3f,sizeof(dis));
q.push(st);
dis[st]=0;
while(!q.empty()){
int x=q.top();
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(register int i=head[x];i;i=edge[i].nxt){
int u=edge[i].to;
dis[u]=min(dis[u],dis[x]+edge[i].v);
q.push(u);
}
}
} int main(){
scanf("%d%d%d",&n,&m,&st);
for(register int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dijkstra();
for(register int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}

最短路 Dijkstra模板的更多相关文章

  1. HDU-2544 最短路 Dijkstra模板题

    题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...

  2. 单源最短路——Dijkstra模板

    算法思想: 类似最小生成树的贪心算法,从起点 v0 每次新拓展一个距离最小的点,再以这个点为中间点,更新起点到其他点的距离. 算法实现: 需要定义两个一维数组:①vis[ i ] 表示是否从源点到顶点 ...

  3. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. 图论--最短路-- Dijkstra模板(目前见到的最好用的)

    之前的我那个板子,老是卡内存,不知道为什么,我看别人过的那个题都是结构体,我就开始对自己板子做了修改,然后他奶奶的就过了,而且速度也提高了,内存也小了.(自从用了这个板子,隔壁小孩馋哭了)也不知道为啥 ...

  5. 基础最短路(模板 dijkstra)

    Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多 ...

  6. 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板)

    layout: post title: 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板) author: "luowentaoaa" catalo ...

  7. hdu-2544-最短路(dijkstra算法模板)

    题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...

  8. HDU 2544 最短路 【Dijkstra模板题】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...

  9. acwing 850. Dijkstra求最短路 II 模板

    地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...

随机推荐

  1. 【LeetCode 60】第k个排列

    题目链接 [题解] 逆康托展开. 考虑康托展开的过程. K = ∑v[i]*(n-i)! 其中v[i]表示在a[i+1..n]中比a[i]小的数字的个数 (也即未出现的数字中它排名第几(从0开始)) ...

  2. Rabin算法

    中国剩余定理 如果已知n的素因子,那么就能够利用中国剩余定理求解方程组.用现代数学的语言来说明就是,中国剩余定理给出了以下的一元线性同余方程组有解的判定条件: 一般而言,如果n的素因子可以分解为: \ ...

  3. [CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)

    题目背景 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. 题目描述 现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初 ...

  4. Linux二进制程序安装使用

    下载好的二进制,压缩包解压,或者直接是二进制. 放到想要的目录 在 /etc/environment 双引号前面添加程序路径 以:开头,\结尾可以换行 接下来修改sudo ,不然sudo会找不到 以下 ...

  5. phpredis报错信息:protocol error, got 'o' as reply type byte解决方案

    今天在前端调用PHP的接口时,有报错信息为:protocol error, got 'o' as reply type byte另外此错误有几率会重现,并不是必现的.十分疑惑,遂百度一下,发现是red ...

  6. ORM模型类介绍,

    所有的软件开发过程中,都会涉及到对象和关系型数据库,在用户层面和业务逻辑层面,程序员编写代码都是面向对象的,当我们对象的信息发生变化的时候,都需要将对应的信息,传到关系型数据库中.而在此之前,需要我们 ...

  7. Linux对用户态的动态内存管理

    Linux对内核态内存分配请求与用户态内存分配请求处理上分别对待 Linux本身信任自己,因此Linux内核请求分配多少内存,就会马上分配相同数量的内存出来. 但内核本身不相信应用程序,而且通常应用程 ...

  8. python自带的split VS numpy中的split比较

    Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 str1.split() 里面的参数,可以是空格,逗号,字符串啥的,具体应用与 ...

  9. [Leetcode] 176.第二高薪水

    题目: 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | ...

  10. springboot 项目启动脚本

    springboot项目启动可通过下面的shell脚本启动. startup.sh app=order-service-rest.jar appout=logs/${app/.jar/.out} ap ...