数据结构经典算法学习之老鼠走迷宫02
2016-12-29 17:52
441 查看
老鼠走迷宫
基于上一遍博文的基础上,稍作修改,显示所有可达到的最近路线(这里指的最近就是不存在到达出口处还在别的出口来回走,额。。。可能没表达清楚,读者可以自己跑一下程序看看就明白了)
代码实现:
package wj.arithmatic;
public class Mourse {
int maze[][] = { { 2, 2, 2, 2, 2, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 0, 2, 0, 2 }, { 2, 0, 0, 2, 0, 2, 2 },
{ 2, 2, 0, 2, 0, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2 } };
public void mourse() {
// 迷宫图初始化
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (maze[i][j] == 2) {
System.out.print("+");
} else {
System.out.print(" ");
}
}
System.out.println();
}
// 老鼠起点设置,游戏开始
find(0, 1);
}
// 是否越界
public boolean isIndexOut(int i, int j) {
return i < 0 || j > 6;
}
// 迷宫路径寻找
public void find(int i, int j) {
// 找到任意出口,结束
if (i == 5 && maze[i][j] == 1) {
System.out.println("老鼠找到了一条迷宫的出路!");
}
// 左
if (!isIndexOut(i, j - 1)) {
if (maze[i][j - 1] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j - 1) + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i][j + 1] = 1;
find(i, j + 1);
}
}
if (!isIndexOut(i, j + 1)) {
// 右
if (maze[i][j + 1] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j + 1) + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i][j+1] = 1;
find(i, j + 1);
}
}
if (!isIndexOut(i-1, j)) {
//上
if (maze[i - 1][j] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i - 1) + "),(" + j + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i - 1][j] = 1;
find(i - 1, j);
}
}
if (!isIndexOut(i+ 1, j)) {
//下
if (maze[i + 1][j] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i + 1) + "),(" + j + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i + 1][j] = 1;
find(i + 1, j);
}
}
}
public static void main(String args[]) {
new Mourse().mourse();
}
}
基于上一遍博文的基础上,稍作修改,显示所有可达到的最近路线(这里指的最近就是不存在到达出口处还在别的出口来回走,额。。。可能没表达清楚,读者可以自己跑一下程序看看就明白了)
代码实现:
package wj.arithmatic;
public class Mourse {
int maze[][] = { { 2, 2, 2, 2, 2, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 0, 2, 0, 2 }, { 2, 0, 0, 2, 0, 2, 2 },
{ 2, 2, 0, 2, 0, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2 } };
public void mourse() {
// 迷宫图初始化
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (maze[i][j] == 2) {
System.out.print("+");
} else {
System.out.print(" ");
}
}
System.out.println();
}
// 老鼠起点设置,游戏开始
find(0, 1);
}
// 是否越界
public boolean isIndexOut(int i, int j) {
return i < 0 || j > 6;
}
// 迷宫路径寻找
public void find(int i, int j) {
// 找到任意出口,结束
if (i == 5 && maze[i][j] == 1) {
System.out.println("老鼠找到了一条迷宫的出路!");
}
// 左
if (!isIndexOut(i, j - 1)) {
if (maze[i][j - 1] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j - 1) + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i][j + 1] = 1;
find(i, j + 1);
}
}
if (!isIndexOut(i, j + 1)) {
// 右
if (maze[i][j + 1] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j + 1) + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i][j+1] = 1;
find(i, j + 1);
}
}
if (!isIndexOut(i-1, j)) {
//上
if (maze[i - 1][j] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i - 1) + "),(" + j + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i - 1][j] = 1;
find(i - 1, j);
}
}
if (!isIndexOut(i+ 1, j)) {
//下
if (maze[i + 1][j] == 0) {
System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i + 1) + "),(" + j + ")");
times++;
// 走过的路线填充为1,避免重复
maze[i + 1][j] = 1;
find(i + 1, j);
}
}
}
public static void main(String args[]) {
new Mourse().mourse();
}
}
相关文章推荐
- 数据结构经典算法学习之老鼠走迷宫01
- 数据结构经典算法学习之三色旗
- [个人记录]小白书学习第6章数据结构基础算法竞赛入门经典第一版)
- 数据结构经典算法学习之多背包问题
- 经典高斯算法,一起学习数据结构和算法吧!
- 数据结构入门学习系列-8(栈的经典算法用例)
- 数据结构经典算法学习之八皇后01
- 数据结构经典算法(5)老鼠走迷官(一)
- 数据结构经典算法学习之河内之塔(汉诺塔)
- 《Delphi 算法与数据结构》学习与感悟[9]: 循环链表
- 【算法学习】【数据结构】treap的构建和使用
- 数据结构与算法 学习笔记
- 小菜数据结构于算法学习之路
- 数据结构与算法学习之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
- 算法导论学习笔记-第十四章-数据结构的扩张
- 经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
- 数据结构经典算法汇总___图的邻接表实现
- 数据结构经典算法汇总___循环队列:
- C#数据结构和算法学习系列一----打造自己的Collection类
- 算法与数据结构的一些学习体会