最短路径算法

PAT (Advanced Level) 1003 Emergency

橙三吉。 提交于 2020-03-04 16:02:58
题意 有 N 个城市,每个城市有点权, M 条带权无向边,从指定的起点城市到达指定的终点城市。要求路径最短,输出这样的最短路径有几条,其中路径上点权之和最大为多少。 思路 最短路,dijkstra。习惯性写堆优化的(自己搞一个结构体,重载一下小于号,代码可能更简洁一点)。因为还要求最短路径数量和路径最大点权和,所以稍微改一下算法:在更新距离不变时,更新答案;更新距离改变时,传递答案。 代码 # include <bits/stdc++.h> using namespace std ; int main ( ) { ios :: sync_with_stdio ( false ) ; cin . tie ( nullptr ) ; cout . tie ( nullptr ) ; int n , m , st , en ; cin >> n >> m >> st >> en ; vector < int > num ( n ) ; for ( int & e : num ) cin >> e ; vector < vector < pair < int , int >> > adj ( n ) ; for ( int i = 0 , u , v , val ; i < m ; ++ i ) { cin >> u >> v >> val ; adj [ u ] . emplace

最短路径覆盖问题

可紊 提交于 2020-03-04 07:42:32
首先诚挚感谢BYvoid大神博客里提供的好题和数据 此为线性规划与网络流24题的第三题。 «问题描述: 给定有向图G=(V,E)。设P 是G 的一个简单路(顶点不相交)的集合。如果V 中每个 顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖。P 中路径可以从V 的任何一个顶 点开始,长度也是任意的,特别地,可以为0。G 的最小路径覆盖是G 的所含路径条数最少 的路径覆盖。 设计一个有效算法求一个有向无环图G 的最小路径覆盖。 «编程任务: 对于给定的给定有向无环图G,编程找出G的一个最小路径覆盖。 «数据输入: 由文件input.txt提供输入数据。文件第1 行有2个正整数n和m。n是给定有向无环图 G 的顶点数,m是G 的边数。接下来的m行,每行有2 个正整数i和j,表示一条有向边(i,j)。 «结果输出: 程序运行结束时,将最小路径覆盖输出到文件output.txt 中。从第1 行开始,每行输出 一条路径。文件的最后一行是最少路径数。 建模部分分析: 考虑到在一个满足要求的路径覆盖中: 每个顶点属于且仅属于一条路径 每个点处最多出发一条边到达另一顶点 于是将一个点i拆成两个点Xi和Yi,分别代表从点i出发和到达点i。从而建立一个二分图,若原图中存在边(i,j),则在二分图中构造边(Xi,Yi),容量设为1。 再建立源点S,汇点T,S与每个X连接一条容量为1的边

BFS最短路径问题

我们两清 提交于 2020-02-29 16:39:54
前言 由于BFS的逐层访问的性质,即从起点由近及远的访问,因此BFS算法常用于寻找最短路径。当然, 只适合于解决一些比较简单的问题。 模板 BFS函数: const int maxn = 10000 ; int pre [ maxn ] ; //pre[i]表示i的前一个结点(用于存储路径) bool inq [ maxn ] ; //是否入过队 vector < int > adj [ maxn ] ; //邻接表 void bfs ( int s , int des ) { //起点、终点 queue < int > q ; q . push ( s ) ; inq [ s ] = 1 ; while ( ! q . empty ( ) ) { int now = q . front ( ) ; q . pop ( ) ; if ( now == des ) return ; for ( int i = 0 ; i < adj [ now ] . size ( ) ; i ++ ) { if ( inq [ adj [ now ] [ i ] ] == 0 ) { q . push ( adj [ now ] [ i ] ) ; pre [ adj [ now ] [ i ] ] = now ; inq [ adj [ now ] [ i ] ] = 1 ; } } } }

图论——最短路径问题

廉价感情. 提交于 2020-02-27 15:57:41
之前自己看过和总结过相关的东西,今天再总结说一下; 感觉权值问题,是否无向有向,权值正负可以直接用不同的算法进行解决; 这次还是主要说一说四种算法:迪杰斯特拉算法、BF算法、SPFA算法、弗洛伊德算法; 迪杰斯特拉算法: 老生常谈最简单的一种算法,从某一点出发,建立Distance数组,不断地寻找当前最近节点,并且选择该节点后,以该节点作为中介,更行其他的全不distance长度; 个人认为适合单源到多点的路径问题; 之前做的总结 https://blog.csdn.net/InNoVaion_yu/article/details/86629313 但是仍然需要注意的是该算法的衍生问题:多路径问题; 对于多路径问题往往加限定条件; 不加任何条件的整体代码: #include<stdlib.h> #include<stdio.h> #include<algorithm> #include<string> #include<iostream> #include<vector> using namespace std; using std::vector; const int MAXV=1000; const int INF=1000000000; struct Node{ int v,dis; }; vector<Node>Adj[MAXV];//图的存储 int d[MAXV];/

HDOJ题目分类

你。 提交于 2020-02-21 07:22:40
1001 整数求和 水题 1002 C语言实验题——两个数比较 水题 1003 1、2、3、4、5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 1006 Redraiment猜想 数论:容斥定理 1007 童年生活二三事 递推题 1008 University 简单hash 1009 目标柏林 简单模拟题 1010 Rails 模拟题(堆栈) 1011 Box of Bricks 简单题 1012 IMMEDIATE DECODABILITY Huffman编码 1013 STAMPS 搜索or动态规划 1014 Border 模拟题 1015 Simple Arithmetics 高精度计算 1016 Shoot-out 博弈+状态压缩DP 1017 Tour Guide 1018 Card Trick 简单题 1019 Necklace Decomposition 贪心 1020 Crashing Robots 模拟题 1021 Electrical Outlets 简单题 1022 Watchdog 简单题 1023 Taxi Cab Scheme 图论:最小路径覆盖--->最大二分匹配 1024 Pseudo-random Numbers 数论 1025 Card Game Cheater 简单题 1026

python-可能用到的包

不问归期 提交于 2020-02-19 04:33:16
文章目录 networkx graph的构造 algorithms networkx 这是一个跟网络相关的包,包括网络的可视化,网络的算法,如最短路径,聚类系数等等 graph的构造 numpy array -> graph G = nx.Graph(array) - graph -> numpy array adj_matrix = nx.adjacency_matrix(G) algorithms 最短路径的各个算法 来源: CSDN 作者: zz的博客 链接: https://blog.csdn.net/qq_41956860/article/details/104323425

数学建模 图论最短路径问题

烂漫一生 提交于 2020-02-08 04:30:32
1、图的基本概念 图论中的图(Graph)是由若干给定的点及连接两点的线 所构成的图形,这种图形通常用来描述某些事物之间的某种 特定关系,用点代表事物,用连接两点的线表示相应两个事 物间具有这种关系。 一个图可以用数学语言描述为G(V(G),E(G))。V(vertex)指 的是图的顶点集,E(edge)指的是图的边集。根据边是否有方向,可将图分为有向图(图一)和无向图(图二)。另外,有些图的边上还可能有权值,这样的图称为有权图(图三)。 2、作图 1、 在线作图 2、matlab作图 % % Matlab作无向图 % ( 1 )无权重(每条边的权重默认为 1 ) % 函数 graph ( s , t ) :可在 s 和 t 中的对应节点之间创建边,并生成一个图 % s 和 t 都必须具有相同的元素数;这些节点必须都是从 1 开始的正整数,或都是字符串元胞数组。 s1 = [ 1 , 2 , 3 , 4 ] ; t1 = [ 2 , 3 , 1 , 1 ] ; G1 = graph ( s1 , t1 ) ; plot ( G1 ) % 注意哦,编号最好是从 1 开始连续编号,不要自己随便定义编号 s1 = [ 1 , 2 , 3 , 4 ] ; t1 = [ 2 , 3 , 1 , 1 ] ; G1 = graph ( s1 , t1 ) ; plot ( G1 ) %

最短路径算法

孤街浪徒 提交于 2020-02-04 14:23:07
各个算法的比较 Bellman-Ford 强调边与边的问题,能够解决负权边问题 基本操作,实现某顶点到所有顶点的最小距离 输入样例 5 5 //分别代表边的条数与顶点的个数 2 3 2 //分别代表两顶点和两顶点对应边的权值 1 2 -3 1 5 5 4 5 2 3 4 3 结果: 0 -3 -1 2 4 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int p = 99999; int dis[10100];//定义数组dis[i],代表某点到顶点i的最小距离 int main() { int n, t, m; cin >> n >> t; int u[100], v[100], w[100]; for (int i = 1; i <= n; i++) { cin >> u[i] >> v[i] >> w[i]; } for (int i = 1; i <= t; i++) dis[i] = p; dis[1] = 0;//dis[1]=0,代表某顶点到1的距离为0,可知此顶点为顶点1 /*核心代码*/ for (int i = 1; i < n; i++)//循环n-1条边 { for (int j = 1; j <= t; j++)

算法题 最短路径-02-Frogger

三世轮回 提交于 2020-02-02 09:24:57
Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on another stone. He plans to visit her, but since the water is dirty and full of tourists’ sunscreen, he wants to avoid swimming and instead reach her by jumping. Unfortunately Fiona’s stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps. To execute a given sequence of jumps, a frog’s jump range obviously must be at least as long as the longest jump occuring in the sequence. The frog distance

Java数据结构与算法精讲

被刻印的时光 ゝ 提交于 2020-01-23 03:19:40
课程简介 本系列视频教程为数据结构与算法基础,使用java语言描述,适合没有学过C/C++有一定Java基础的同学。没有Java基础的同学可以先行学习Java基础。 课程目录 ├─线性表 ├─栈和队列 ├─HashMap和LinkedHashMap ├─树 ├─二叉树 ├─图 ├─图的遍历与最小生成树 ├─图的最短路径与拓扑排序 ├─算法简介 ├─算法排序 ├─排序与归并 ├─递归与穷举 ├─贪心和分治 ├─动态规划和回溯 来源: CSDN 作者: di_pingxian 链接: https://blog.csdn.net/di_pingxian/article/details/103897423