普通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. JS中数据结构之图

    图由边的集合及顶点的集合组成.边是有方向的是有序图(有向图),否则就是无序图(无向图).图中的一系列顶点构成路径,路径中所有的顶点都由边连接.路径的长度用路径中第一个顶点到最后一个顶点之间边的数量表示 ...

  2. Cent OS (三)vi文本编辑操作

    序号 命令 命令含义 1 echo            2 vi/vim    编辑 3 cat     cat 命令用于连接文件并打印到标准输出设备上. 4 more   分屏显示文本内容 5 l ...

  3. java并发编程笔记(八)——死锁

    java并发编程笔记(八)--死锁 死锁发生的必要条件 互斥条件 进程对分配到的资源进行排他性的使用,即在一段时间内只能由一个进程使用,如果有其他进程在请求,只能等待. 请求和保持条件 进程已经保持了 ...

  4. 汇编指令ADD

    格式: ADD OPRD1,OPRD2 功能: 两数相加(不带进位) 例子: add ax,bx add ax,ax 解释:

  5. frida的js脚本处理正则的一个小坑

    frida的server模式需要python支持,所以js脚本中的正则需要多一次转义 比如匹配"/proc/{数字pid}" server: paramPath.match(&qu ...

  6. 初学Selenium遇上的问题

    1.IWebDriver driver = new InternetExplorerDriver();运行时报关于protecte model的错误 解决办法就是用如下代码设置IEDriverOpit ...

  7. VMware中Centos7的静态ip设置

    网络连接方式:桥接模式.修改后确定.启动centos7,root账户进行登录. 2.修改网卡配置文件 (1) 打开网卡配置文件 vim /etc/sysconfig/network-scripts/i ...

  8. Ubuntu下配置了ssh,但是连接很慢

    ssh登录服务器时总是要停顿等待一下才能连接上,这是因为OpenSSH服务器有一个DNS查找选项UseDNS默认是打开的. UseDNS选项打开状态下,当客户端试图登录OpenSSH服务器时,服务器端 ...

  9. [fw]PAGE_SIZE & PAGE_SHIFT & _AC()

    PAGE_SIZE & PAGE_SHIFT & _AC() 在大多系统下,PAGE_SIZE被定义为 4k 大小,即 4096 字节. 在 x86 系统里,PAGE_SIZE 和 P ...

  10. docker--build自己的image

    通过container commit成image [root@localhost docker_test]# docker container commit #可以简写成docker commit a ...