最短路径问题

解密迷宫问题:三种高效算法Java实现,让你轻松穿越未知迷宫 我们总结一下,在迷宫问题中,深度优先搜索(DFS)、广度优先搜索(BFS)和 A* 都可以用来寻找最短路径或最优解。空间要求低,不需要保存整个搜索树,只需要保存当前路径;所有解的路径长度差别不大,或者只需要找到其中一个解;迷宫比较大,而且有很多死路,采用 DFS 可以快速探索大面积空间。需要找到最短路径或最优解;迷宫中大部分路径长度差别不大;可以承受较大的空间复杂度,需要保存整个搜索树。需要找到最短路径或最优解;需要考虑迷宫中的障碍物,即寻找一条避开障碍物的路径; 阅读详情

题目来源:http://acm.hdu.edu.cn/vcontest/vtl/problem/showproblem/vtlid/4642/problemid/1011




java代码如下:

public class Shortest {
//http://acm.hdu.edu.cn/vcontest/vtl/problem/showproblem/vtlid/4642/problemid/1011
	private int[][] table=new int[10][10];
	private boolean[][] map=new boolean[10][10];
	private void initTable(){
		int i=5;
		int j=4;
		int number=2;
		table[i][j]=1;
		int a=1,b=2;
		while(number<73){
			for(int d=0;d<a;d++){
				table[i][++j]=number++;
			}
			for(int d=0;d<a;d++){
				table[--i][j]=number++;
			}
			a+=2;
			for(int d=0;d<b;d++){
				table[i][--j]=number++;
			}
			for(int d=0;d<b;d++){
				table[++i][j]=number++;
			}
			b+=2;		
		}
		for(int d=0;d<a;d++){
			table[i][++j]=number++;
		}
		for(int d=0;d<a;d++){
			table[--i][j]=number++;
		}
		for(int d=0;d<b-1;d++){
			table[i][--j]=number++;
		}
	}
	private void initMap(){
		map[0][3]=true;
		map[1][4]=map[1][6]=true;
		map[2][1]=map[2][7]=map[2][9]=true;
		map[3][0]=map[3][2]=map[3][6]=true;
		map[4][3]=map[4][5]=map[4][7]=true;
		map[5][2]=map[5][5]=map[5][6]=map[5][8]=true;
		map[6][1]=map[6][3]=true;
		map[7][0]=map[7][4]=true;
		map[8][1]=map[8][5]=map[8][9]=true;
		map[9][0]=map[9][6]=true;
	}
	private int aim;
	public Shortest(int a,int b){
		initTable();
		initMap();
		aim=b;
		for(int i=0;i<10;i++)
			
			for(int j=0;j<10;j++){
				if(table[i][j]==a){
					process(i,j,0);
					break;
				}
			}
		if(bestPath==1000000){
			System.out.println("impossible");
		}else{
			System.out.println(bestPath);
		}
	}
	//表示很远
	private int bestPath=1000000;
	
	private void process(int i,int j,int path){
		if(table[i][j]==aim){
			if(path<bestPath){
				bestPath=path;
			}
		}
		map[i][j]=true;
		//没有数据 有数据的为true,
		if(i-1>=0&&!map[i-1][j]){
			//向上	
			process(i-1,j,path+1);
		}
		if(i+1<=9&&!map[i+1][j]){
			//向下
			process(i+1,j,path+1);
		}
		if(j-1>=0&&!map[i][j-1]){
			//向左
			process(i,j-1,path+1);
		}
		if(j+1<=9&&!map[i][j+1]){
			//向右
			process(i,j+1,path+1);
		}
		map[i][j]=false;
	}
	public static void main(String[] args) {
		int start=9;
		int end=32;
		new Shortest(start,end);
	}
	
}


最短路径问题——单源最短路径问题 根据结点的拓扑排序次序来对有向无环图进行边的松弛操作(由于无环,则负环路肯定不存在)。每次松弛从当前结点出发的所有边。伪代码:邻接表存储:;邻接矩阵存储:。 阅读详情

相关推荐

java实现的求迷宫最短路径算法

用java实现的求迷宫最短路径的算法源代码,代码中有大量注释,容易看懂

迷宫问题(Java实现,求最短路径)

题目链接 迷宫问题 定义一个二维数组: int maze[n][m]; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 输入描述: 一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。 int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 样式输出: (0,0) (

就这样吧 9146

告别黑盒调试:用MMSegmentation可视化工具链,从训练到评估一目了然

本文介绍了如何利用MMSegmentation的可视化工具链,从训练到评估实现语义分割模型的透明化调试。通过整合日志分析、混淆矩阵、PR曲线等工具,开发者可以快速定位模型问题,优化性能。文章详细展示了训练曲线分析、性能剖析、混淆矩阵解读和PR曲线应用等关键步骤,帮助用户告别黑盒调试,提升模型开发效率。

weixin_29100927的博客 104

迷宫最短路径【Java实现】

现有一个n∗m大小的迷宫,其中1表示不可通过的墙壁,0表示平地。每次移动只能向上下左右移动一格,且只能移动到平地上。假设左上角坐标是(1,1),行数增加的方向为x增长的方向,列数增加的方向为y增长的方向,求从迷宫左上角到右下角的最少步数的路径。

Infinity_and_beyond的博客 1940

蓝桥杯STM32G431RBT6学习——GPIO

蓝桥杯STM32G431RBT6学习——GPIO

weixin_44098974的博客 2234

后台扫描工具 - 御剑(珍藏版)附下载

版本说明:御剑后台扫描珍藏版 下载地址:安装包放下方网盘里了 链接:https://pan.baidu.com/s/1Bn7GtWb7AStcjzVahFOjSQ 提取码:zkaq 使用环境:windows 标题工具说明: 御剑后台扫描珍藏版是T00LS大牛的作品,方便查找用户后台登陆地址,同时也为程序开发人员增加了难度,尽量独特的后台目录结构。 附带很强大的字典,字典我们也是可以自己修改的,继续增加规则。 一、御剑后台扫描工具简介: 1、扫描线程自定义:用户可根据自身电脑的配置来设置调节扫描线程 2、

hackzkaq的博客 4万+

java迷宫回溯找最短路径问题(多策略)

java迷宫回溯找最短路径问题(多策略),通过递归方式得到所有策略,再通过递归回溯找到所有的结果,然后排序得到最短的步数、策略和相应的轨迹图

wodebokecsdn的博客 1746

C#【必备技能篇】Winform实现多语言切换(.resx文件的应用)

在实际的项目开发中,软件需要实现多语言切换。本文通过一个实际的例子,可以让你学习到这个技能。

星Yeah 的博客 1万+

迷宫问题——(java)(bfs)

我们每次只添加队头的相邻元素,然后添加完队头的相邻元素(注意:只添加没有访问过的元素,1虽然也是相邻元素,但是1已经被访问过了,所以添加1到队列),队头就算已经访问过了。队首的元素不断变化,队尾的元素不断添加,最后直到每一个节点都被访问过,那么此队列中就无法添加元素了,队列中的元素就会不断的减少直到变成空队列。每次将队首的元素的取出,然后添加和队首元素相邻并且没有被访问过的元素到队尾,然后更新队列中的每一个元素到起点的最短距离。判断队首元素是否被访问过,如果被访问过,就判断队首元素的下一个元素。

2301_76231651的博客 1007

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 226

【linux】linux 出现一个网卡绑定多个ip怎么处理

我的原因是我使用了dhcp,这个会自动分配ip, 将 BOOTPROTO 参数由 dhcp 改为 static,并移除或注释掉与动态分配地址 10.0.2.15 相关的配置行(如果存在)。执行后,您可以再次使用 ip -4 a 或 ifconfig 命令确认 IP 地址已被移除。输出可以看出,您的虚拟机(k8s003)中存在一个名为 enp0s3 的网卡绑定了多个 IPv4 地址。对于某些 Linux 发行版(如 Ubuntu、Debian),您可能需要编辑网络接口的配置文件来移除多余的 IP 地址。

九师兄 297

迷宫问题(最短路径问题)

我们接着之前讲过的初阶迷宫问题,这次我们来说说高阶迷宫问题,高阶的迷宫问题难在有多条路径去选择,所以我们现在需要做的不是找到路径而是找到最短的路径地下迷宫_牛客题霸_牛客网 (nowcoder.com)小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。

2301_80344616的博客 2510

BlockUI专栏目录

BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际开发中经常被使用。BlockUI可以帮助用户快速创建NX对话框,支持多种控件类型,如按钮、文本框、标签等。通过使用BlockUI,用户可以轻松地自定义对话框的布局、样式和交互行为。此外,BlockUI还提供了一些高级功能,如动态更新、条件显示和事件处理等,以帮助用户创建更加复杂和灵活的对话框。本专栏讲述了使用BlockUI制作NX对话框的方法,介绍了每个控件的功能,并且分享一些常用操作的源码。

王牌飞行员_里海的博客 1632

C++:图的最短路径问题

最短路径问题是图的一个比较典型的应用问题。例如,给定某公路网的n个城市以及这些城市之间相通公路的距离,能否找到城市A到城市B之间一条距离最近的通路呢?如果将城市用顶点表示城市间的公路用边表示,公路的长度作为边的权值,这个问题就归结为在网图中求顶点A和顶点B的最短路径。

han2205277149的博客 1893

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。本文重点介绍了服务端的启动链路、网络初始化和连接处理这三个过程,并简要分析的游戏循环的实现与数据包处理,在下一篇文章中,我们会从客户端角度分析从游戏启动、登录、游戏开始和基础游戏交互的全流程。

东方猫的博客 2497

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

单源最短路径问题

单源最短路径问题 一、问题描述 如果存在一条从i到j的最短路径(Vi…Vk,Vj),Vk是Vj前面的一顶点。那么(Vi…Vk)也必定是从i到k的最短路径,求出最短路径。 分析: 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。 该性质描述为:如果P(i,j)={Vi…Vk…Vs…Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。 假设P

escFAJ的博客 4300

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最短路径问题实现思路

把从一个顶点v0到到途中其余任意一点v1路径上所有边权值之和定义为该路径带权路径长度,带权路径长度最短的那条路径称作最短路径。 求解最短路径的算法通常依赖于一种性质,两点之间的最短路径也包含了路径上其它顶点的最短路径。 带权有向图最短路径问题分为两类: 1、单源最短路径 2、每一对顶点间的最短路径 Dijkstra算法求单源最短路径问题 求带权有向图某个源点到其余各顶点的最短路径,常用Dijkst...

chen_bin_的博客 3193

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构——最短路径问题

文章目录前言一、问题分类二、单源最短路径1.无权图(BFS)(1)问题分析(2) 路径记录2.有权图(DiskStra算法)(1)问题分析(2)算法介绍(3)代码实现三、多源最短路径1.问题分析2.枚举(1)思路3.Floyd算法(1)思路分析(2)代码实现 前言 两个顶点之间的最短路径问题就是求一条路径可以令两顶点沿途各边权值之和最小。 一、问题分类 对于这个问题,可以分为两种情况: 1.单源最短路径:从固定起点出发,求最短路径; 2.多源最短路径:求任意两顶点间最短路径。 除此以外,在每种情.

qq_52441682的博客 6021

图的最短路径问题

Dijkstra算法用于求解单源最短路径问题。它通过不断选择当前最短路径的节点扩展出新的最短路径,直到所有节点都被访问。适用于没有负权边的图。Bellman-Ford算法也是解决单源最短路径问题,但它能够处理包含负权边的图,并且可以检测图中是否存在负权环。Floyd-Warshall算法用于求解多源最短路径问题,即计算所有节点之间的最短路径。

Major_S的博客 1192

最短路径问题总结

单源最短路径问题(Single-Source Shortest Path, SSSP)➤ 从一个起点到图中所有其他节点的最短路径。常用算法:Dijkstra算法、Bellman-Ford算法。单目标最短路径问题(Single-Destination Shortest Path)➤ 所有节点到同一个终点的最短路径(可以通过反向边转化为单源问题)。单对最短路径问题(Single-Pair Shortest Path, SPSP)➤ 只求两个特定节点之间的最短路径。

jerrykorea的博客 1642
上一篇: 整数划分
下一篇: KMP算法代码(java版)
KeepThinking_
博客等级 码龄15年 50粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值