迷宫问题
对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更
愿意使用“紧贴墙壁,靠右行走”的简单规则。
58
下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。
假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。
这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。
仔细分析代码中的逻辑,填充缺少的部分。把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应
题号的“解答.txt”中即可。


import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
class Cell{ // 单元格
int row; // 哪行
int col; // 哪列
Cell from; // 开始点
public Cell(int row,int col,Cell from){
this.row = row;
this.col = col;
this.from = from;
}
}
public class T04 {
static char[][] maze = {
{'#','#','#','#','B','#','#','#','#','#','#','#'},
{'#','#','#','#','.','.','.','.','#','#','#','#'},
{'#','#','#','#','.','#','#','#','#','.','.','#'},
{'#','.','.','.','.','#','#','#','#','#','.','#'},
{'#','.','#','#','#','#','#','.','#','#','.','#'},
{'#','.','#','#','#','#','#','.','#','#','.','#'},
{'#','.','#','#','.','.','.','.','.','.','.','#'},
{'#','.','#','#','.','#','#','#','.','#','.','#'},
{'#','.','.','.','.','#','#','#','.','#','.','#'},
{'#','#','.','#','.','#','#','#','.','#','.','A'},
{'#','#','.','#','#','#','.','.','.','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#','#','#'}
};
// 显示迷宫
public static 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();
}
}
// 染色
public static Cell colorCell(Set<Cell> from,Set<Cell> desc){
Iterator<Cell> iter = from.iterator();
59
while(iter.hasNext()){
Cell a = iter.next();
Cell c[] = new Cell[4];
c[0] = new Cell(a.row-1,a.col,a); // 向上走
c[1] = new Cell(a.row+1,a.col,a); // 向下走
c[2] = new Cell(a.row,a.col-1,a); // 向左走
c[3] = new Cell(a.row,a.col+1,a); // 向右走
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] = '?'; // 染色
desc.add(c[i]);
}
}
}
return null;
}
//
public static void resolve(){
Set<Cell> set = new HashSet<Cell>();
set.add(new Cell(9,11,null));
for(;;){
Set<Cell> set1 = new HashSet<Cell>();
// 出口 a.from.from.from.....<-(set.get(0).from)==null<-入口
Cell a = colorCell(set,set1);
if(a!=null){ // 找到解
System.out.println("找到解!");
while(a!=null){ // 当前a里包含a.from 一直往前推
maze[a.row][a.col] = '+'; // 染色路径
a = a.from;
}
break;
}
if(set1.isEmpty()){ // 遍历所以一直到没有路走,这时 set1为空
System.out.println("无解!");
break;
}
set = set1; // 向里边
}
}
public static void main(String[] args){
show();
resolve();
60
show();
}
}
运行结果:
# # # # B # # # # # # #
# # # # . . . . # # # #
# # # # . # # # # . . #
# . . . . # # # # # . #
# . # # # # # . # # . #
# . # # # # # . # # . #
# . # # . . . . . . . #
# . # # . # # # . # . #
# . . . . # # # . # . #
# # . # . # # # . # . A
# # . # # # . . . # # #
# # # # # # # # # # # #
找到解!
# # # # B # # # # # # #
# # # # + . . . # # # #
# # # # + # # # # ? ? #
# + + + + # # # # # ? #
# + # # # # # ? # # ? #
# + # # # # # ? # # ? #
# + # # + + + + + + + #
# + # # + # # # ? # + #
# + + + + # # # ? # + #
# # ? # ? # # # ? # + +
# # ? # # # ? ? ? # # #
# # # # # # # # # # # #

java实现迷宫问题相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. java迷宫算法栈_java - 用Java创建迷宫求解算法 - 堆栈内存溢出

    我被分配了在Java中创建迷宫求解器的任务. 这是作业: Write an application that finds a path through a maze. The maze should ...

  9. java解决迷宫问题bfs_BFS入门,Java迷宫问题

    这其实是BFS的入门级问题,我以初学者的姿态研究,如有不足请指正. BFS的核心是利用query的先进先出原则,而本题的回溯用到了stack的后进先出原则,可以说是对两种数据结构的复习. 在解题过程中 ...

最新文章

  1. 计算机网络- ARP(地址解析协议)
  2. 使用Windows上SourceInsight工具建立分析Linux下uboot源代码project
  3. SAP+ 差旅报销集成方案的实现
  4. Django内建模版标签和过滤器
  5. python的内存管理机制及调优手段_Python的内存管理机制及调优手段
  6. [转载] java中关于用\t格式输出
  7. html5 规定输入字段,HTML5 Input属性详解
  8. php性能优化 --- laravel 性能优化
  9. Hibernate框架 配置文件基本架构
  10. UVa 1640 (计数) The Counting Problem
  11. 高性能 TCP UDP 通信框架 HP-Socket v3.3.1
  12. php vip卡,vip.php
  13. 【留言板】在这聊个天勾搭一下神犇之类的
  14. 网络工程师成长日记384-商南PIX防火墙网络项目回忆录
  15. day07 c++复习 核心编程02 核心内容(1、友元 2、3、继承 )
  16. 【学习笔记】H5性能测试
  17. 虚拟地址和物理地址及其映射
  18. clickhouse中的TTL
  19. 详解百度指数搜索指数js逆向
  20. vue中data数据之间的调用

热门文章

  1. 每日三个笑话-201510117
  2. 易语言制作的神经网络模块2.0
  3. ubuntu18.04 安装HP打印机
  4. ZigBee网络基础
  5. Flink事件时间、水印以及迟到数据处理的个人理解
  6. 【Mac】超详细的个性化终端(Terminal)颜色及vim颜色配置
  7. 【网络攻防原理与技术】第4章:网络扫描技术
  8. hp服务器装vm系统,HP DL380G6上安装配置Vmware_ESXI4.1
  9. 服务器开机后显示器不显示,hp DL380 G7服务器无法开机,屏幕没显示
  10. linux处理带空格文本,linux shell 处理带空格的文字