** 迷宫走法**

迷宫问题

对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更愿意使用“紧贴墙壁,靠右行走”的简单规则。
下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。

仔细分析代码中的逻辑,填充缺少的部分。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。

public class Maze
{class Cell{private int row;private int col;private Cell from;public Cell(int row, int col, Cell from){this.row = row;this.col = col;this.from = from;}}char[][] maze = {{'#','#','#','#','B','#','#','#','#','#','#','#'},{'#','#','#','#','.','.','.','.','#','#','#','#'},{'#','#','#','#','.','#','#','#','#','.','.','#'},{'#','.','.','.','.','#','#','#','#','#','.','#'},{'#','.','#','#','#','#','#','.','#','#','.','#'},{'#','.','#','#','#','#','#','.','#','#','.','#'},{'#','.','#','#','.','.','.','.','.','.','.','#'},{'#','.','#','#','.','#','#','#','.','#','.','#'},{'#','.','.','.','.','#','#','#','.','#','.','#'},{'#','#','.','#','.','#','#','#','.','#','.','A'},{'#','#','.','#','#','#','.','.','.','#','#','#'},{'#','#','#','#','#','#','#','#','#','#','#','#'}};public void show(){for(int i=0; i<maze.length; i++){for(int j=0; j<maze[i].length; j++)
System.out.print(" " + maze[i][j]);System.out.println();}}//把与from集合中相邻的可染色节点染色,被染色节点记入 dest//一旦发现出口将被染色,则返回当前的“传播源”节点public Cell colorCell(Set<Cell> from, Set<Cell> dest){Iterator<Cell> it = from.iterator();while(it.hasNext()){Cell a = it.next();Cell[] c = new Cell[4];c[0] = new Cell(a.row-1, a.col, a);c[1] = new Cell(a.row, a.col-1, a);c[2] = new Cell(a.row+1, a.col, a);c[3] = ___________________________;for(int i=0; i<4; i++){if(c[i].row < 0 || c[i].row >= maze.length) continue;if(c[i].col < 0 || c[i].col >= maze[0].length) continue;char x = maze[c[i].row][c[i].col];if(x=='B') return a;if(x=='.') {maze[c[i].row][c[i].col] = '?';____________________;}}}return null;}public void resolve(){Set<Cell> set = new HashSet<Cell>();set.add(new Cell(9,11,null));for(;;){Set<Cell> set1 = new HashSet<Cell>();Cell a = colorCell(set, set1);if(a!=null){System.out.println("找到解!");while(a!=null){maze[a.row][a.col] = '+';______________;}break;}if(set1.isEmpty()){System.out.println("无解!");break;}set = set1;}        }public static void main(String[] args){Maze m = new Maze();m.show();m.resolve();m.show();    }
}new Cell(a.row, a.col+1, a)
dest.add(c[i])
a = a.from

java实现迷宫走法相关推荐

  1. Java自动计算迷宫正确路线算法源码

    简介: Java自动计算迷宫正确路线算法源码,首先迷宫需要满足存在开始标识和结束标识与墙标识,然后设置好行数与列数就可以开始计算正确路线了,采用的是为二维数组然后走遍所有路线的方式. 网盘下载地址: ...

  2. java生成迷宫_Java实现可视化迷宫

    需求 使用深度优先算法求解迷宫路径,使用Java实现求解过程的可视化,可单步运行,形象直观. 演示效果 红色格子为迷宫终点,迷宫可放大缩小,为了录屏选择了较小的尺寸,有多种不同难度的迷宫可以加载. 简 ...

  3. java深度优先迷宫生成_通过深度优先搜索产生的迷宫的Java代码

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.FileOutputStream; import java. ...

  4. Java 地下迷宫·算法·(ACM/蓝桥杯)·递归解法

    题目:小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫.为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了 ...

  5. java 迷宫最短路径_用Java实现迷宫最短路径算法

    单源最短路(Bellman - Ford算法) 宽度优先搜索 迷宫最短路径用宽度优先搜索(bfs)相比用深度优先搜索(dfs)的好处在于bfs每次计算都是最短路径不存在重复计算,而dfs每计算出一条可 ...

  6. java bfs 迷宫例子_51-迷宫(一)- java版dfs和bfs

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数 nn ...

  7. java生成迷宫_java怎么生成迷宫地图

    package cn.zhongZw.model; import java.util.ArrayList; import java.util.Random; public class MazeMode ...

  8. java实现迷宫问题

    迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更 愿意使用"紧贴墙壁,靠右行走"的简单规则. 58 下面的代码则采用了 ...

  9. 项目三 Java开发迷宫游戏

    一.项目预习: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 通过树实现是比较容易的,从根节点到每一个子节点都只有一条路径.假设入口是根节点,出口是树中某个子节点,那么,从根节点 ...

最新文章

  1. Android library module生成aar文件
  2. 【编程好习惯】青睐小粒度锁
  3. 在QT中结构体快速从二进制文件中读取数据
  4. c语言里变量列表,嵌入式C语言里的土豪们之变量类型
  5. 【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!
  6. dos中特殊符号命令的应用
  7. jarsigner签名过程
  8. .net remoting 与webservice
  9. codeforce 884C - Bertown Subway DFS+图论
  10. php 5.6连接sqlserver,wamp php5.6连接sqlserver
  11. k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像
  12. 怎样运用Oracle的BFILE
  13. anaconda显示ImportError: cannot import name ‘secure_write‘
  14. 上架服务器必须做的准备工作
  15. 什么是DBA[WHAT'S MEANING OF DBA]
  16. 使用jsp:include嵌入页面的两种方式
  17. 华为为何还没鸿蒙,华为鸿蒙2.0正式发布,但无第三方公开支持,华为的路该怎么走?...
  18. 0~9的ASCII码
  19. windows - 更改用户账户名称(windows10)
  20. Mac如何添加打印机

热门文章

  1. java.lang.NoClassDefFoundError: com/huaban/analysis/jieba/JiebaSegmenter
  2. Python怼人代码,让编程变得更有趣
  3. 《PPT思维》第一课:PPT基础思维
  4. 微信小程序云开发数据库操作
  5. 怎么用python编简单游戏大全_适合新手练手的三个python简单小游戏
  6. 美国的非农数据一般会在几点发布
  7. 关于固态硬盘SSD的4K对齐
  8. 计算机网络学习笔记 3.6 局域网
  9. 有限差分——图像求偏导
  10. vivado xilinx IOB = true的使用