Acwing--朴素dijkstra
#include <iostream>
#include <cstring>
using namespace std;/*
优点:可以求得【n】到任一点的最短距离;可以输入最短路径(经过的点)
缺点:略麻烦
*/const int N=510;//点数
int g[N][N];//稠密图,使用邻接矩阵
int dist[N];//n点到【s】的距离
int path[N];//存储路径
bool collect[N];//用来判断是否还在集合中int n,m;//找未收录集合中最小的dist
int findmin(){int v,min_v;int min_dist=0x3f3f3f3f;//未被录入且dist[]最小for(v=1;v<=n;v++){if(!collect[v]&&dist[v]<min_dist){min_dist=dist[v];//更新最小距离min_v=v;//更新最小点}}if(min_dist<0x3f3f3f3f){ //没有找到,min_dist就没有更新成功return min_v;}else{return -1;}
}//传入s点即可,【s】~~【n】的距离
void dijkstra(int s){//先把起点收集进去dist[s]=0;collect[s]=true;//再把与s的邻接点初始化一下 //一共n个点,每个遍历找邻接点for(int i=1;i<=n;i++){if(g[s][i]!=0x3f3f3f3f){ //如果s-->i边的权重(距离)不是正无穷,说明他们俩挨着dist[i]=g[s][i];}}//正式进入dijkstra循环while(1){//找到未收录集合中最小的distint v=findmin();cout <<v<<endl;if(v==-1){break; //如果此点不存在就跳出循环}collect[v]=true;//找到点了,收录进去//更新最小距离//找v的邻接点for(int i=1;i<=n;i++){//若i是v的邻接点且未被收录if(g[v][i]!=0x3f3f3f3f&&!collect[i]){//若收录i使得dist[i]减小,更新if(dist[v]+g[v][i]<dist[i]){dist[i]=dist[v]+g[v][i];path[i]=v;}}}}}int main(){scanf("%d %d",&n,&m);//初始化memset(g,0x3f,sizeof(g));//初始化邻接矩阵 没有直接相连的两点,其g[n][m]=infinitymemset(path,-1,sizeof(path));//初始化路径-1memset(dist,0x3f,sizeof(dist));//dist[]距离为正无穷,否则无法更新//m条边进行输入进去while(m--){ int x,y,z;scanf("%d %d %d",&x,&y,&z);g[x][y]=min(g[x][y],z);//排除重边的影响。 重边时,取最短路就可}//执行函数dijkstra(1); //在这里我们传入起点1//到最后如果dist[n]没有被更新,说明n点陷入环中了if(dist[n]==0x3f3f3f3f){printf("-1");}else{printf("%d",dist[n]);}return 0;
}
Acwing--朴素dijkstra相关推荐
- AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)
题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...
- AcWing:Dijkstra
伪码: a. 初始化 dist[1] = 0, dist[i] = +inf S:当前已经确定为最短距离的点b. for(int i = 1; i <= n; i ++){1. 寻找不在 S 中 ...
- AcWing 850. Dijkstra求最短路 II
原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...
- AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】
AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...
- 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II
堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...
- 7-4 最短路径之Dijkstra(朴素dijkstra打印路径)
作者 龚雄兴 单位 湖北文理学院 本题目要求通过读入无向网的边的信息(省略了各顶点的信息,仅用顶点编号来表示),构造图,并利用Dijkstra算法,求出指定源点到其它各点的最短路径. 样例" ...
- AcWing 850. Dijkstra求最短路 II(堆优化dijkstra)
题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点, ...
- Dijkstra AcWing 850. Dijkstra求最短路 II
Dijkstra AcWing 850. Dijkstra求最短路 II 原题链接 AcWing 850. Dijkstra求最短路 II 算法标签 最短路 Dijkstra 思路 图片摘自该题解 图 ...
- POJ - 1847(朴素dijkstra)
题目链接 思路: 由题意得只有第一个方向不要转距离为 0,其他方向要转距离都为 1, 已知起点和中点,朴素dijkstra即可,感觉最短路的问题很多有建图思路大概就会写了. 样例为答案为 0 的情况解 ...
- ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)
模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...
最新文章
- lnmp安装博客系统WordPress
- synchronized关键字实现原理
- mysql 支持 pdo_使php支持pdo_mysql_睿合科技
- wireshark抓取https并解密方法一
- mysqldump死住(实际是导致mysqld crash)
- 一个vue加egg.js的博客
- pyqt按钮关闭窗口_PyQt5按钮单击事件,退出程序
- mysql+case_mysql内置函数case用法介绍
- Java学习笔记2.3.3 运算符与表达式 - 关系运算符
- turtle库自动轨迹绘制
- 个人工作用SQL短句,不定时更新
- C/C++ volatile
- C语言基础知识之#pragma once
- Android技术专家 高焕堂 推荐这本书
- 大并发服务器不得不说的技术--TCP_CORK
- Layui layui-soul-able 组件 表格列进行拖拽
- vs2019编译FlightGear
- c语言召唤窗口,如何设计出高点击率的行为召唤按钮?
- python中文词云图代码_用python写一个词云图生成器
- 使用163邮箱+Python3.6 发送邮件/批量发送邮件