最短路 Dijkstra模板
普通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模板的更多相关文章
- HDU-2544 最短路 Dijkstra模板题
题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...
- 单源最短路——Dijkstra模板
算法思想: 类似最小生成树的贪心算法,从起点 v0 每次新拓展一个距离最小的点,再以这个点为中间点,更新起点到其他点的距离. 算法实现: 需要定义两个一维数组:①vis[ i ] 表示是否从源点到顶点 ...
- HDU 2544最短路dijkstra模板题
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 图论--最短路-- Dijkstra模板(目前见到的最好用的)
之前的我那个板子,老是卡内存,不知道为什么,我看别人过的那个题都是结构体,我就开始对自己板子做了修改,然后他奶奶的就过了,而且速度也提高了,内存也小了.(自从用了这个板子,隔壁小孩馋哭了)也不知道为啥 ...
- 基础最短路(模板 dijkstra)
Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多 ...
- 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板)
layout: post title: 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板) author: "luowentaoaa" catalo ...
- hdu-2544-最短路(dijkstra算法模板)
题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...
- HDU 2544 最短路 【Dijkstra模板题】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2544 思路:最短路的模板题 Dijkstra 算法是一种类似于贪心的算法,步骤如下: 1.当到一个点时, ...
- acwing 850. Dijkstra求最短路 II 模板
地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...
随机推荐
- 【Java】使用Lambda排序集合
下面是Java lambda表达式的简单例子: // 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. ...
- 【丛林】HTML Table 表格浅谈(边框、隔行变色
此例子已经包含本文大部分内容,请对照参考.查看代码 > 定义和用法 table标签定义 HTML 表格. 创建表格的四要素:table.tr.th.td <table> 整个表格以& ...
- 安装maven之后,cmd提示mvn不是内部命令的解决办法
1.maven的安装教程 下载地址为:http://maven.apache.org/download.cgi 进入此页面之后 点击下载,然后解压,我把目录名改为maven,目录结构如下图所示 下面我 ...
- JS 替换
JS 字符串有replace() 方法.但这个方法只会对匹配到的第一个字串替换. 如下例: var str = "wordwordwordword"; var strNew = s ...
- windows汇编语言开发环境搭建
1.下载软件mash32 http://www.masm32.com/download/masm32v11r.zip 此软件包含对汇编文件的编译和运行,下载后直接运行并解压即可 2.配置环境变量 在系 ...
- 用Python实现一个大数据搜索引擎
用Python实现一个大数据搜索引擎 搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家 ...
- 0.OpenCV框架
reference: https://docs.opencv.org/4.1.2/ 基本使用 1.图片和视频,读写(2,8) 2.OpenCV基本数据类型(3) 3.OpenCV大型数据类型及操作:图 ...
- 封装token
let baseApiUrl = 'xxxx' var app = getApp(); let defaultHeaders = { 'Content-Type': 'application/json ...
- 第一次刷Leetcode,为什么耗费很多时间
Leetcode第2题思考过程分析:耗费的时间与思考过程 1. 审题耗费了很长时间,英文看不懂.两个单链表代表了两个整数,整数逆序,(2 -> 4 -> 3) + (5 -> 6 - ...
- laravel打印查询的sql
public function __construct( ){ $log = DB :: listen( function( $sql ){ echo $sql; } ); }