#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相关推荐

  1. AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)

    题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...

  2. AcWing:Dijkstra

    伪码: a. 初始化 dist[1] = 0, dist[i] = +inf S:当前已经确定为最短距离的点b. for(int i = 1; i <= n; i ++){1. 寻找不在 S 中 ...

  3. AcWing 850. Dijkstra求最短路 II

    原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...

  4. AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】

    AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...

  5. 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II

    堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...

  6. 7-4 最短路径之Dijkstra(朴素dijkstra打印路径)

    作者 龚雄兴 单位 湖北文理学院 本题目要求通过读入无向网的边的信息(省略了各顶点的信息,仅用顶点编号来表示),构造图,并利用Dijkstra算法,求出指定源点到其它各点的最短路径. 样例" ...

  7. AcWing 850. Dijkstra求最短路 II(堆优化dijkstra)

    题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点, ...

  8. Dijkstra AcWing 850. Dijkstra求最短路 II

    Dijkstra AcWing 850. Dijkstra求最短路 II 原题链接 AcWing 850. Dijkstra求最短路 II 算法标签 最短路 Dijkstra 思路 图片摘自该题解 图 ...

  9. POJ - 1847(朴素dijkstra)

    题目链接 思路: 由题意得只有第一个方向不要转距离为 0,其他方向要转距离都为 1, 已知起点和中点,朴素dijkstra即可,感觉最短路的问题很多有建图思路大概就会写了. 样例为答案为 0 的情况解 ...

  10. ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)

    模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...

最新文章

  1. lnmp安装博客系统WordPress
  2. synchronized关键字实现原理
  3. mysql 支持 pdo_使php支持pdo_mysql_睿合科技
  4. wireshark抓取https并解密方法一
  5. mysqldump死住(实际是导致mysqld crash)
  6. 一个vue加egg.js的博客
  7. pyqt按钮关闭窗口_PyQt5按钮单击事件,退出程序
  8. mysql+case_mysql内置函数case用法介绍
  9. Java学习笔记2.3.3 运算符与表达式 - 关系运算符
  10. turtle库自动轨迹绘制
  11. 个人工作用SQL短句,不定时更新
  12. C/C++ volatile
  13. C语言基础知识之#pragma once
  14. Android技术专家 高焕堂 推荐这本书
  15. 大并发服务器不得不说的技术--TCP_CORK
  16. Layui layui-soul-able 组件 表格列进行拖拽
  17. vs2019编译FlightGear
  18. c语言召唤窗口,如何设计出高点击率的行为召唤按钮?
  19. python中文词云图代码_用python写一个词云图生成器
  20. 使用163邮箱+Python3.6 发送邮件/批量发送邮件

热门文章

  1. HBM显存技术与市场前景
  2. 使用Tensor Expression张量表达式处理算子
  3. ARM CPU神经网络自动调度
  4. TensorFlow csv读取文件数据(代码实现)
  5. ADAS虚拟车道边界生成
  6. Python:CrawlSpiders
  7. android 购物车数量加减计算(几行代码实现效果)
  8. Android 购物车图片上面添加数字
  9. 黑马程序员 交通灯案例
  10. 打字游戏--飞机大战