最短路径算法

BFS最短路径

北城余情 提交于 2019-12-04 17:41:14
BFS 广搜算法 讲一下图的遍历,广搜。 广搜是图的遍历的一种,它能够在图中的两的点之间找到一条最短的一条路径。但是如果仅使用广搜,搜索的规模会与点的数量以及边的数量有关。当规模很大的时候,广搜不是一种很好的解决方案。 举个例子,这是图的形式 然后便是其邻接矩阵的形式: 再者是其邻接表的形式: 如若没有了解该算法的大体思想,可以参考我的另一篇文章 ------>这是链接<------ 以下便是代码,改代码使用的是链式结构,即邻接表实现,输入格式在main.cpp中注释部分 main.cpp #include"GraphBFS.h" int main() { GraphBFS g1; g1.Init(); g1.Display(); return 0; } /* 5 5 1 5 2 1 2 4 2 3 5 3 4 1 4 5 6 */ GraphBFS.h #pragma once #ifndef _GRAPHBFS_H_ #define _GRAPHBFS_H_ #include<iostream> #include<cstdlib> #include<queue> #include<vector> using namespace std; const int MAX = 0xffffff; struct nPoint { int arrive; int d; nPoint*

最短路径算法之迪杰斯特拉算法(Dijkstra)和佛洛依德算法(Floyd)

匿名 (未验证) 提交于 2019-12-03 00:34:01
今天学习了这两种算法,都是用来求最小路径的算法,但是迪杰斯特拉算法只能从某个特定点到所有点的最短路径,而佛洛依德算法可以查出任意点到任意点的最小路径。 迪杰斯特拉: package dijkstra; import java.util.Scanner; import java.util.Stack; /* * 算法思路:通过从特定起点查找,一直查找到所有点到这个点的最小路径。 * 算法特点:因为要预防两点间的距离可能不是直接距离最短,所以处理要有些特别 * 算法处理思路:首先通过一个大的循环嵌套循环count(点)-1次,这么做是为了查找除了自身的所有点到起点的权值。 * 再通过一个for循环查找此时可达路径离起点最近的点。把查出来点的设为已查找过。 * 接下来再通过这个最短权值的点进行for循环操作,这个for循环作用是如果经过新增v顶点到达的定点比当前已知路径都短,我们更新 * 这个路径权值,并设置到这个点的前驱节点是v,让我们查询时能查出路径 *每个点都会走一次 * */ public class Dijkstra { public static void main(String[] args) { DijkstraArithmetic dijkstraArithmetic=new DijkstraArithmetic(); dijkstraArithmetic

FLOYD算法

匿名 (未验证) 提交于 2019-12-03 00:30:01
输入: n*n维矩阵l[ 1...n , 1...n ],以便对于有向图G({[ 1 , ...n },E)中的边(i,j)的长度为l[i,j] 输出: 矩阵 D,使得D[i,j]等于i到j的距离 步骤 ( ( ( dist(k)[i][j]的含义:允许中间顶点的序号最大为k时从vi到vj的最短路径长度。 dist(n-1)[i][j]就是vi到vj的最短路径长度。 时间复杂度分析: FLOYD算法的时间复杂度为 O(n^3); 文章来源: FLOYD算法

地铁线路项目学习记录

我与影子孤独终老i 提交于 2019-12-01 07:10:15
地铁线路项目学习记录 github地址: https://github.com/zky320/Subway 使用的命令行语句 1. 获取对应的自定义地铁文件(命名为 subway.txt) java -cp .:* subway -map subway.txt 2. 获取指定铁路线路的所有站点名称,并存入指定文件 java -cp .:* subway -a 1号线 -map subway.txt -o station.txt 输出文件格式: 1号线: ······ 洪湖里 西站(可转6号线) 西北角 ······ 3. 获取起点站和终点站的最短路径,并存入指定文件 java -cp .:* subway -b 洪湖里 复兴路 -map subway.txt -o routine.txt 输出文件格式: 3 洪湖里 西站 6号线 复兴路 Tips:java文件中需要调用jar包,命令行中的格式为 java -cp .:A.jar B ,而 java -cp .:* subway 可以调用当前文件夹中的所有jar包。 测试用例(最短路径):例子 1. 在同一条线路(的头)上,不经过任何转站点:刘园,洪湖里 2. 在同一条线路(的尾)上,不经过任何转站点:市民广场,东海路 3. 在同一条线路的中间,不经过任何转站点:北竹林,新开河 4. 起点和终点都是转站点(在同一条线上):西站

个人项目_地铁最短线路

我的梦境 提交于 2019-11-30 04:28:40
1.需求分析: 1)编写程序读取-map参数获得自定义地铁文件得到线路信息; 2)编写程序根据起始站查询该线路信息; 3)计算起始站到终点站的最短路径; 4)程序均需严格按要求输出; 2.基本理解: 该作业应该是要求我们思考解决基本的最短线路问题,分很多种情况考虑,然后计算分析。 3.设计思路: 根据题目的输出格式,设计地铁信息展示的表,画出流程图。最后通过之前学过的迪杰特斯拉算法进行最短路径的选择,采用java编程语言。 来源: https://www.cnblogs.com/lincolnfoever/p/11559858.html

Dijkstra算法

馋奶兔 提交于 2019-11-28 16:16:13
先占个坑:开启算法笔记 迪杰斯特拉( Dijkstra )算法是典型的最短路径算法,计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层扩展(广度优先搜索思想),直到扩展到终点为止。 来源: https://blog.csdn.net/u014426939/article/details/100084449

最短路径(floyd和Dijkstra)

时光毁灭记忆、已成空白 提交于 2019-11-27 15:05:22
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 109250 Accepted Submission(s): 46973 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。 输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间 Sample Input 2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0 Sample Output 3 2 Source

多源点最短路径问题

萝らか妹 提交于 2019-11-27 02:08:03
问题描述: 给定带权又向图G=(V,E),对任意顶点Vi和Vj,求顶点Vi到Vj的最短路径长度? 分析: Floyd算法代码很简单,但是理解起来有一定的难度。网上有很多解释方法,我自己的思想还没有完全成熟,稍后在作补充。 #include <iostream> using namespace std ; const int MAXNUM = 999999 ; const int MAX = 1005 ; int cost[MAX][MAX]; int n; void floyd( int d[MAX][MAX]); int main() { int i,j,m,a,b,c; cin >>n>>m; for (i= 0 ;i<n;i++) { for (j= 0 ;j<n;j++) if (i==j) cost[i][j] = 0 ; else cost[i][j] = MAXNUM; } for (i= 0 ;i<m;i++) { cin >>a>>b>>c; cost[a][b]=c; } floyd(cost); cout << "多源点最短路径长度矩阵:" <<endl; for (i= 0 ;i<n;i++) { for (j= 0 ;j<n;j++) { cout <<cost[i][j]<< " " ; } cout <<endl; } return 0 ; }

最短路径

痴心易碎 提交于 2019-11-27 00:27:50
没有用的话qaq : Ummmm…图论的大部分知识本来早就有学过,只是一直没有写成博文来梳理,但既然上了qbxt DP图论就写一篇来总结下, 主要是来听DP的,但…由于太菜的原因,DP听得天花乱坠QWQ 图中的最短路算法分为单源最短路算法(dijkstra,Bellman-food,spfa)和多源最短路算法(floyd),单源最短路算法是求图上一点到其他任意一点的最短路径,多源最短路算法是求图上任意两点之间的最短路。 一,多源最短路算法 Floyd弗洛伊德算法,运用了动态规划的思想,用邻接矩阵存储,期初将从任何一点到其他所有点的最短路都置成正无穷,然后输入时修改有的权值,其主要思想是动态规划,在最外围枚举点,看看有没有一个点可以更新两点之间的最短路。 代码简单易懂 memset(dis,0x3f,sizeof(dis)); for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); 时间复杂度为O(n^3 ),空间复杂度为O(n^2),时间和空间均不是很优,一般较少采用,一般在求n范围较小的多源最短路题中才有出现。 可以适用于有负权边的情况,可以判断图的连通性,可以传递闭包 二,多源最短路算法 1,Dijkstra a