最短路径

bfs---迷宫的最短路径

匿名 (未验证) 提交于 2019-12-03 00:43:02
给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。N,M小于等于100. 输入 N=10,M=10 #S######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .####.###. ....#...G# 输出 22 实现代码 #include<iostream> #include<queue> using namespace std; typedef pair<int,int> P; char a[110][110]; //迷宫 int b[110][110]; //到每点的步数 int sx,sy; //起点 int ex,ey; //终点 int n,m; int INF = 100000000; int dx[4] = {1,0,-1,0}; //四个方向 int dy[4] = {0,1,0,-1}; int bfs(int x,int y){ queue<P> que; que.push(P(sx,sy)); //将起点加入队列,并把这一地点的距离设置为0 b[sx][sy] = 0; while(que.size()){ /

数学建模方法-Floyd算法

匿名 (未验证) 提交于 2019-12-03 00:41:02
一、引言   哈喽大家好,今天要给大家讲的是 Floyd 算法。在那之前,大家还记得我们上一章讲的内容吗,就是那个 Dijkstra 算法,用来解决从 A 点到 B 点的最短路径问题。我们还给出了 Matlab 代码。 Floyd 算法也是用来处理最短路径问题的。它的理念跟 Dijkstra 有点不一样,但是最终的结果是一样的。 Floyd 算法主要是用到了 动态规划 的思想。在这里博主不打算讲到很抽象很高深的东西(毕竟博主也不是专业的),仅仅通过比较通俗易懂的方式来给大家讲解这个算法的思想( 如果有问题大家帮忙指出来哈 )。本文的图片和思想,借用了 (图片画得好好,有谁知道是用什么软件画的吗,博主也想学一学)。本篇的主要思想来自那篇博文,因此会有很多类似的,但博主还是想以自己的理解来解释Floyd算法的理念。好了我们开始吧... 二、 Floyd 算法   首先,大家看上面的图,暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。我们用 1-4 来表示 4 个地点,并用 箭头 和箭头上的 数字 来表示一个地点到另一个地点的距离(注意,有些路是单向的)。这样就得到下图   现在,我们希望能求解出任意两点的最短路径及其距离。   好了,为了求解这个问题,我们先用一个二维的数组 A

[算法] 最短路径条数问题

匿名 (未验证) 提交于 2019-12-03 00:27:02
给定如图所示的无向连通图,假定图中所有边的权值均为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径数目。 权值相同的最短路径问题,则单源点 D i j k s t r a D i j k s t r a 算法退化为BFS广度优先算法, 使用 D i j k s t r a D i j k s t r a 算法只能求的到各个节点的最短路径,但不能求得最短路径的条数。假定起点为0,终点为N,数组 s t e p [ 0... N 1 ] s t e p [ 0... N 1 ] 中 s t e p [ i ] s t e p [ i ] 代表到第 i i 个节点的最短路径长度,数组 p a t h N u m [ 0... N 1 ] p a t h N u m [ 0... N 1 ] 中 p a t h N u m [ i ] p a t h N u m [ i ] 代表到第 i i 个节点的最短路径条数,首先: s t e p [ 0... N 1 ] s t e p [ 0... N 1 ] 初始化为0 p a t h N u m [ 0... N 1 ] p a t h N u m [ 0... N 1 ] 初始化为0 p a t h N u m [ 0 ] p a t h N u m [ 0 ] 为1,即起点到起点的路径数量为1 从当前节点 i i

迪克斯特拉算法-- Dijkstra&#039;s Algorithm

匿名 (未验证) 提交于 2019-12-03 00:22:01
在图形应用中,常常需要求从图中某个结点至其余各结点的最短路径,如对于一个物流配送系统计算从配送中心到各订货点的最短路径。 Dijkstra's Algorithm 基本思想: 若给定带权有向图G=(V,E)和源顶点v0,构筑一个源集合S,将v0加入其中。 ③ 重复 步骤①②。直至所有的顶点都加到集合S 中为止。 算法求解过程图式: 步骤: 小结: Dijkstra's 算法与最小生成树的区别在于: ① 最小生成树是对全图而言的,而Dijkstra's算法是对某个结点而言的。 ③ 若Dijkstra's算法依次应用于每个顶点,最后可以得到任意两个顶点之间的最短路径,这就是通常所说的任意顶点对之间的最短路径问题(all-pairs shortest paths,APAP) 文章来源: 迪克斯特拉算法-- Dijkstra's Algorithm

【codevs2602】最短路径问题

匿名 (未验证) 提交于 2019-12-03 00:22:01
problem solution codes #include<cstdio> #include<cstring> #include<cmath> using namespace std ; int a[ 101 ],b[ 101 ]; double f[ 101 ][ 101 ]; int n,m,x,y,s,t; void floyd(){ for ( int k= 1 ;k<=n;k++) for ( int i= 1 ;i<=n;i++) for ( int j= 1 ;j<=n;j++) if (i!=j&&i!=k&&j!=k&&(f[i][k]+f[k][j]<f[i][j]))f[i][j]=f[i][k]+f[k][j]; } void read(){ scanf ( "%d" ,&n); for ( int i= 1 ;i<=n;i++) scanf ( "%d%d" ,&a[i],&b[i]); scanf ( "%d" ,&m); memset (f, 0x7f , sizeof (f)); for ( int i= 1 ;i<=m;i++){ scanf ( "%d%d" ,&x,&y); f[x][y]=f[y][x]= sqrt ( pow ( double (a[x]-a[y]), 2 )+ pow ( double (b[x]-b[y]), 2 )

街区最短路径问题

匿名 (未验证) 提交于 2019-12-03 00:22:01
描述 一个街区有很多住户,街区的街道只能为东西、南北两种方向。 住户只可以沿着街道行走。 各个街道之间的间隔相等。 用(x,y)来表示住户坐在的街区。 例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。 现在要建一个邮局,使得各个住户到邮局的距离之和最少。 求现在这个邮局应该建在那个地方使得所有住户距离之和最小; 输入 第一行一个整数n<20,表示有n组测试数据,下面是n组数据; 每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区的坐标。 m行后是新一组的数据; 输出 每组数据输出到邮局最小的距离和,回车结束; 样例输入 2 3 1 1 2 1 1 2 5 2 9 5 20 11 9 1 1 1 20 样例输出 2 44 #include < bits / stdc ++. h > using namespace std ; int a [ 30 ]; int b [ 30 ]; int main (){ int n ; scanf ( "%d" ,& n ); while ( n --){ int m ; scanf ( "%d" ,& m ); for ( int i = 0 ; i < m ; i ++){ scanf ( "%d %d" ,& a [ i ],& b [ i ]); }

北京地铁最短路径实现

匿名 (未验证) 提交于 2019-12-03 00:14:01
将地铁线路保存成一个可读入,简洁明了的文本 程序能正确读入这个文件,并获取地铁线路信息 程序能正确处理输入的命令行 地铁能正确输出指定地铁线经过的站点 程序能正确输出两个站点间的最短路径 程序要有健壮性,能通过各类性能测试 按要求编写博客,详细说明花费时间,代码,各个模块和测试用例 该文本直接保存进了各条线路的各个站点,没有在文本中考虑换乘点。当读入“一号线”等文字时,将它转换为线路的id号,然后在way数组中作为下标,将后面的各个站点的id号存储进去。换乘情况的话,因为每新读入一个站点,都会给它赋一个id号,所以只要每次判断该站点是否有id号了,如已存在,该站点就是换乘点,保存换乘信息。例如上图中一号线的西单,在四号线中也存在,所以该站点就可以换乘一号线或四号线。 共一个类:Subway Subway类共有六个函数: public static void searchWay(String name, String args):该函数的目标是用来满足需求二,保存所查询线路的各个站点。name就是通过命令行输入的线路的名称,args就是保存信息的文件名称。 该函数先通过if语句判断来得到线路的id号,然后在way数组下得到各个站点的id号,然后根据id号调用getKey()函数得到站点名称,保存进文件中。 public static int findMinDist(int[]

地铁线路设计需求分析

匿名 (未验证) 提交于 2019-12-03 00:11:01
需求分析: 1、提供简洁明了的交互界面。 2、提供地铁线路的文件存储方式。 3、提供实现一个能处理正确输入的命令行的计算地铁线路最短路径的方法。 4、输出最短路径结果。 5、进行功能测试。 设计思路: 1、使用Java搭建用户交互界面。 2、启动程序之后,能够读取文本中的相关信息。 3、读取完信息后,以无向图的形式储存地铁站相关性息。 4、使用弗洛伊德算法算法求出最短路径。 5、调用应用程序 java subway - map subway . txt 6、输入样例 站点 1 站点 2 7、输出样例 3 洪湖里 西站 6 号线 复兴路 设计总结 实现思路和实现方法比较明确,对于ui设计,需要考虑合理的用户交互功能,对于地铁站点信息能全面处理。 来源:博客园 作者: 31701038方晨羽 链接:https://www.cnblogs.com/kuiersaila/p/11564105.html

HDU1595-find the longest of the shortest-dijkstra+记录路径

匿名 (未验证) 提交于 2019-12-03 00:05:01
Marica will travel only by non-blocked roads, and she will travel by shortest route. Mirko wants to know how long will it take for her to get to his city in the worst case, so that he could make sure that his girlfriend is out of town for long enough.Write a program that helps Mirko in finding out what is the longest time in minutes it could take for Marica to come by shortest route by non-blocked roads to his city. In the next M lines are three numbers A, B and V, separated by commas. 1 ≤ A,B ≤ N, 1 ≤ V ≤ 1000.Those numbers mean that there is a two-way road between cities A and B, and that it

广搜遍历迷宫最短路径

匿名 (未验证) 提交于 2019-12-03 00:04:02
开两个二维数组 class node { public : int r ; int c ; node ( ) { } \\ 默认构造函数初始化数组 } ; int d [ max ] [ max ] = { 0 } node p [ max ] [ max ] ; node walk ( node u ) { } ; \\ 用来返回下一个遍历节点; \\ 对于判断条件 d [ i ] [ j ] == 0 \\ 可以走 d [ i ] [ j ] > 0 && d [ i ] [ j ] == - 1 ; \\ 不可以走 \\ 每次成功入队列之后 d [ v . i ] [ v . j ] = d [ u . i ] [ u . j ] + 1 ; pre [ v . r ] [ v . c ] = u ; 来源:51CTO 作者: xbybshd 链接:https://blog.csdn.net/xbybshd/article/details/100805868