对于宫格地图寻最短路径的一个广度搜索算法

 1 import java.util.ArrayDeque;
 2 import java.util.ArrayList;
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map.Entry;
 6 import java.util.Queue;
 7
 8 public class TestPath {
 9
10     public static void main(String[] args) {
11         int arr[][] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
12                                 { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
13                                 { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
14                                 { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
15                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
16                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
17                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
18                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
19                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
20                                 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
21         Queue<String> list = new ArrayDeque<>(100);
22         arr[0][0] = 1;
23         list.add("0,0,0");
24         HashMap<Integer, ArrayList<String>> map = new HashMap<>();
25         int dis = 1;
26         Iterator<String> ite = list.iterator();
27
28         while (ite.hasNext()) {
29             String[] tm = ite.next().split(",");
30             int i = Integer.parseInt(tm[0]);
31             int j = Integer.parseInt(tm[1]);
32             if (i + 1 > 0 && i + 1 < 10 && arr[i + 1][j] != 1) {
33                 dis = Integer.parseInt(tm[2]) + 1;
34                 String p = (i + 1) + "," + j + "," + dis;
35                 arr[i + 1][j] = 1;
36                 list.add(p);
37                 if (map.get(dis) == null) {
38                     map.put(dis, new ArrayList<String>());
39                 }
40                 map.get(dis).add(p);
41             }
42             if (i - 1 > 0 && i - 1 < 10 && arr[i - 1][j] != 1) {
43                 dis = Integer.parseInt(tm[2]) + 1;
44                 String p = (i + 1) + "," + j + "," + dis;
45                 arr[i + 1][j] = 1;
46                 list.add(p);
47                 if (map.get(dis) == null) {
48                     map.put(dis, new ArrayList<String>());
49                 }
50                 map.get(dis).add(p);
51             }
52             if (j + 1 > 0 && j + 1 < 10 && arr[i][j + 1] != 1) {
53                 dis = Integer.parseInt(tm[2]) + 1;
54                 String p = i + "," + (j + 1) + "," + dis;
55                 arr[i][j + 1] = 1;
56                 list.add(p);
57                 if (map.get(dis) == null) {
58                     map.put(dis, new ArrayList<String>());
59                 }
60                 map.get(dis).add(p);
61             }
62             if (j - 1 > 0 && j - 1 < 10 && arr[i][j - 1] != 1) {
63                 dis = Integer.parseInt(tm[2]) + 1;
64                 String p = i + "," + (j + 1) + "," + dis;
65                 arr[i][j + 1] = 1;
66                 list.add(p);
67                 if (map.get(dis) == null) {
68                     map.put(dis, new ArrayList<String>());
69                 }
70                 map.get(dis).add(p);
71             }
72             ite.remove();
73             ite = list.iterator();
74         }
75         for (int i = 0; i < map.get(3).size(); i++) {
76             System.out.println(map.get(3).get(i));
77         }
78         for (Entry<Integer, ArrayList<String>> m: map.entrySet()) {
79             for (String str : m.getValue()) {
80                 if (str.startsWith("2,4")) {
81                     System.out.println(str);
82                 }
83             }
84         }
85     }
86
87 }

记录了各个点到(0,0)点的距离,其中数组中值为1的点是不可通过的点。

时间: 2024-10-07 15:30:06

对于宫格地图寻最短路径的一个广度搜索算法的相关文章

Python3网络爬虫实战-45、微博宫格验证码的识别

本节我们来介绍一下新浪微博宫格验证码的识别,此验证码是一种新型交互式验证码,每个宫格之间会有一条指示连线,指示了我们应该的滑动轨迹,我们需要按照滑动轨迹依次从起始宫格一直滑动到终止宫格才可以完成验证,如图 8-24 所示: 图 8-24 验证码示例 鼠标滑动后的轨迹会以×××的连线来标识,如图 8-25 所示: 图 8-25 滑动过程 我们可以访问新浪微博移动版登录页面就可以看到如上验证码,链接为:https://passport.weibo.cn/signin/login,当然也不是每次都会出

一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除时,图标抖动效果),可进入删除状态,再次单击进入普通状态 3,图片设置最大上限,加号按钮自动隐藏 4,已选图片可单击进行重新选择 5,无需代理,直接调用对应属性就可获取所有图片,并与显示顺序保持一致 效果图如下: 1 // 2 // SZAddImage.h 3 // addImage 4 // 5

一个全等四宫格实现的多种方法

方法一:用float方法实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>一个全等四宫格的实现</title> <style> .parent{ background-color:#fff; width: 500px; height: 400px; margin-left: -10px; margin-top: -10px;

安卓项目开发实战(2)--星座展示12宫格

好多日子没有写安卓了,今天继续我未完成的安卓项目.今天主要实现星座展示的12宫格效果. 1.星座图片 找好12星座的图片,参见工程代码下面的res/drawable目录 2.星座枚举类 建立这个枚举类是很有必要的,可以使我们 的代码更加清晰,同时避免了魔法数字的情况. 枚举类的代码如下: package com.liuc.constatntEnum; import com.liuc.R; /** * 星座枚举 * * @author Administrator * */ public enum

9宫格拼图

选张图片做成9宫格拼图 今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局(.xaml文件) 看下源文件 控件有 DockPanel Grid Button三个然后设置了Grid有三列和三行.DockPannel暂时不知道有什么用,所以我先不忙加.然后我就报错了 原来 xaml是用的xml格式.button外面没有双标签包围,不能识别,所以报错.所

珊格地图笔记

写在前面:这篇文章是Coursera上的课程(Robotics: Estimation and Learning),权当笔记,激光传感器的数据可以在课程内下载.这一周的内容比较简单,但十分实用. 在这片文章中,我们将会介绍: 机器人世界的几种地图: 占据栅格地图的表示方法与更新方法: 利用激光传感器数据构建占据栅格地图. 1. 机器人地图的分类 地图有很多种表示方式,例如,用经纬度标识地方的世界地图,城市的地铁图,校园指引图. 第一种我们称为尺度地图(Metric Map),每一个地点都可以用坐

9宫格题目:css完成9宫格,鼠标移动高亮

今天和大家分享一个在群里看到的一个面试题目.大致意思就是 一个9宫格,鼠标移上去要有高亮效果(只能使用css),然后自己是尝试了一下. 先上效果图 当你看到这个效果图的时候,建议你,不要看下面,先自己尝试着写写看,会很有趣的. -------------------------------------------------分割线------------------------------------------------------- 先上代码: HTMl 1 <div class="

MUI组价五:开关、底部选项卡、9宫格和分页

1.switch(开关) mui提供了开关控件,点击滑动两种手势都可以对开关控件进行操作,UI如下:默认开关控件,带on/off文字提示,打开时为绿色背景,基本class类为.mui-switch..mui-switch-handle,DOM结构如下: <div class="mui-switch"> <div class="mui-switch-handle"></div> </div> 若希望开关默认为打开状态,只

Android自定义多宫格解锁控件

在此之前,一直在想九宫格的实现方法,经过一个上午的初步研究终于完成了一个简单的N*N的宫格解锁组件,代码略显粗糙,仅仅做到简单的实现,界面等后期在做优化,纯粹是学习的目的,在算法上有点缺陷,如果有错误或者更好的方法,欢迎提出,相互学习.先来看一下预览图 九宫格效果展示 N=3 手指抬起 N=4 手指没有抬起 其他的废话不多说了,直接开始吧..... 实现步骤 设置声明属性attrs.xml文件 创建SeniorPoint.java文件 创建View并重写其中的几个重要方法 设置触摸事件,并进行数