以2021年合肥学院校赛E题为例

题目描述
zs王国中有n个城镇,在这些城镇之间有m条路,bs需要从1号城镇出发去n号城镇完成他的使命,现在请你规划一条路径,使bs走的路径最短,输出最短路径长度,若不能达到n号城镇输出“-1”。
输入描述:
第一行包含整数 n 和 m。
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

输出描述:
输出一个整数,表示 1 号点到 n 号点的最短距离。
如果路径不存在,则输出 −1

样例输入

3 3
1 2 2
2 3 1
1 3 4

样例输出

3

备注:
1≤n≤500,
1≤m≤100000,
图中涉及边长均不超过10000。

这道题就是一道最短路径板子题
dijistra算法

#include<bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const int maxn = 1e3;
int G[maxn][maxn];
int d[maxn],n,m;
bool visited[maxn] = {false};
void dijistra() {fill(d, d + maxn, INF);d[1] = 0;//起点到起点的距离为0 for(int i = 1; i <= n; i++) {int u = -1, MIN = INF;for(int j = 1; j <= n; j++) {if(visited[j] == false && d[j] < MIN) {u = j;MIN = d[j];}}if(u == -1) return;//找不到u,则起点到达不了剩下的点 visited[u] = true;for(int v = 1; v <= n; v++) {if(visited[v] == false && G[u][v] != INF && d[u] + G[u][v] < d[v]) d[v] = d[u] + G[u][v];}}
}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);fill(G[0], G[0] + maxn * maxn, INF);cin >> n >> m;while(m--) {int u,v,w;cin >> u >> v >> w;G[u][v] = min(G[u][v], w);//这里要这样写,直接写G[u][v]=w会WA,可能后台数据出现了重复的u v}dijistra();if(d[n] == INF) cout << -1;else cout << d[n];return 0;
}

floyd算法

#include<bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const int maxn = 1000;
int G[maxn][maxn];
int d[maxn],n,m;
bool visited[maxn] = {false};
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);fill(G[0], G[0] + maxn * maxn, INF);cin >> n >> m;for(int i = 0; i < m; i++) {int u,v,w;cin >> u >> v >> w;G[u][v] = min(G[u][v], w);}for(int i = 1; i <= n; i++) G[i][i] = 0;for(int k=1;k<=n;k++) {for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {if(G[i][k] != INF && G[k][j] != INF && G[i][k] + G[k][j] < G[i][j]) G[i][j] = G[i][k] + G[k][j];}}}if(G[1][n] == INF)cout << -1;else cout << G[1][n];return 0;
}

最短路径(dijistra和floyd算法)相关推荐

  1. 最短路径问题(Floyd算法、Dijkstra算法、Bellman-Ford算法、SPFA算法)

    导入 最短路径问题是指在一幅带权图中,找出连接两个顶点之间的所有路径中,边权和最短的那一条.如下图就是一幅带权图,边上的数字就代表该边的权值.解决最短路径问题有多种不同的算法,本文将对它们的基本思想与 ...

  2. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  3. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

  4. 最短路径——Floyd算法及优化(蓝桥杯试题集)

    *对最短路径问题以及floyd算法.Dijkstra算法不是很理解的同学请移步前几篇博客~ 题目链接: http://lx.lanqiao.cn/problem.page?gpid=T15 问题描述 ...

  5. 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)

    图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...

  6. Floyd算法、Dijkstra算法例题

    二 1.用Floyd算法求解下图各个顶点的最短距离. 2.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径. 2.解析 1)用Floyd算法求解各个顶点的最短距离. 第一步:画出初始化距离 ...

  7. C语言实现Floyd算法

    题目描述: 有向单源最短路径问题(Floyd算法) 输入格式 第1行:2个空格分开的整数n(2<=n<=500)和m(10<=m<=20000),分别表示图的顶点数和边数. 第 ...

  8. 算法其实很简单—弗洛伊德(Floyd)算法

    目录 1.弗洛伊德(Floyd)算法介绍 2.弗洛伊德(Floyd)算法最佳应用-最短路径 3.弗洛伊德(Floyd)算法图解分析 3.1 弗洛伊德算法的步骤: 4.代码实现 1.弗洛伊德(Floyd ...

  9. floyd算法:我们真的明白floyd吗?

    图论里一个很重要的问题是最短路径问题. 这个问题,在离散数学课上会考,数据结构与算法课上会考,图论课上会考,计算机网络里会考.... 解决最短路径问题有几个出名的算法: 1.dijkstra算法,最经 ...

  10. 最短路:Floyd算法(Python实现)

    Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题.Floyd算法的根本原理是动态规划. 算法描述 开始:对于每一对顶点 ...

最新文章

  1. JVM调优:基本垃圾回收算法
  2. 计算机网络谢希仁第七版课后答案第五章 传输层
  3. JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
  4. Opencv中常见的滤波方法
  5. 【JVM】调优笔记1-----堆栈概念的对碰
  6. Spring的@Configuration配置类-Full和Lite模式
  7. 个人计算机与手机的区别,手机与电脑的CPU是一回事吗?一共有六大区别,看看你知道多少!...
  8. Ubuntu的中文是哪种字体?python的词云分析和 三国演义人物出场统计
  9. cosmos db_开放电影项目Cosmos Laundromat如何使Blender更好
  10. java的linux内核构建,构建一个Docker 的Java编译环境
  11. 微信小程序弹框wx.showToast、wx.showModal样式修改
  12. Spring 注解的原理
  13. word怎么删除参考文献的横线_Word2010利用尾注做参考文献时如何删除尾注中的横线...
  14. 基于STC89C52RC的小车黑线钝角、锐角、迷宫、虚线循迹模块化代码
  15. MYSQL学习日记(三)
  16. 企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明
  17. Mstar Mac Phy 驱动学习
  18. node-red教程3.3 file控件介绍
  19. 射频卡机井灌溉控制器特点
  20. 一些程序员必备的英语词汇及释义

热门文章

  1. 企业请专职SEO和外包给科技公司做优化,有什么不同?
  2. linux下dns解析出错该如何配置
  3. 互联网发展的四个阶段
  4. 【统计学】相关性和因果关系
  5. hdu 3689 Infinite monkey theorem (KMP+DP)
  6. 金沙滩开发板单片机学习笔记(2)
  7. 有哪些 Java 源代码看了后让你收获很多,代码思维和能力有较大的提升?
  8. AIS数据修复-三次样条插值法(Cubic spline interpolation)
  9. python如何用opencv把一个视频按每10秒一小段切割
  10. 网络爬虫是什么意思?