迷宫算法实现

简介: 直接上代码,痛快点。package algorithm;import junit.framework.TestCase;/** * Created by Rocky on 14-3-31.

直接上代码,痛快点。

package algorithm;

import junit.framework.TestCase;

/**
 * Created by Rocky on 14-3-31.
 * 下午7:59
 */
public class MyMaze extends TestCase {

    /**
     * @param maze   0表示可走,1表示不可走,2表示这步已走
     * @param startI 入口横坐标
     * @param startJ 入口竖坐标
     * @param endI   出口横坐标
     * @param endJ   出口竖坐标
     */
    public void resolveMaze(int[][] maze, int startI, int startJ, int endI, int endJ) {

        maze[startI][startJ] = 2;
        System.out.println("*************走一步***************");
        printMaze(maze);

        if (startI == endI && startJ == endJ) {
            System.out.println("********************成功*******************");
            printMaze(maze);
        } else {
            /*向右*/
            if(startJ + 1 < maze[startI].length){
                if(maze[startI][startJ+1]==0 ){
                    resolveMaze(maze, startI, startJ+1, endI, endJ);
                }
            }
            /*向下*/
            if(startI + 1 < maze.length){
                if(maze[startI+1][startJ]==0 ){
                    resolveMaze(maze, startI+1, startJ, endI, endJ);
                }
            }
            /*向上*/
            if(startI -1 >= 0){
                if(maze[startI-1][startJ]==0 ){
                    resolveMaze(maze, startI-1, startJ, endI, endJ);
                }
            }
            /*向左*/
            if(startJ- 1 >=0){
                if(maze[startI][startJ-1]==0 ){
                    resolveMaze(maze, startI, startJ-1, endI, endJ);
                }
            }
        }

        if (maze[startI][startJ] != 0) {
            maze[startI][startJ] = 0;
        }
        System.out.println("*************退一步***************");
        printMaze(maze);
    }

    private void printMaze(int[][] maze) {
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                if (maze[i][j] == 2) {
                    System.out.print("*\t");
                } else {
                    System.out.print(maze[i][j] + "\t");
                }
            }
            System.out.println();
        }

    }

    public void test() {
        int maze[][] = {
                {0, 0, 3, 3, 3, 3, 3, 3, 3},
                {3, 0, 0, 0, 0, 0, 0, 0, 3},
                {3, 0, 3, 3, 0, 3, 3, 0, 3},
                {3, 0, 3, 0, 0, 3, 0, 0, 3},
                {3, 0, 3, 0, 3, 0, 3, 0, 3},
                {3, 0, 0, 0, 0, 0, 3, 0, 3},
                {3, 3, 0, 3, 3, 0, 3, 3, 3},
                {3, 0, 0, 0, 0, 0, 0, 0, 0},
                {3, 3, 3, 3, 3, 3, 3, 3, 0}};
        resolveMaze(maze,0,0,8,8);
    }
}

运行结果:




目录
相关文章
|
算法 Python
随机生成迷宫-深度优先搜索算法
在计算机科学中,迷宫生成是一个经典的问题,广泛应用于游戏设计、路径规划等领域。本文将介绍一种常见的迷宫生成算法——深度优先搜索算法(Depth-First Search, DFS),通过随机选择路径进行探索和回溯,最终生成一个随机且有趣的迷宫。
462 1
|
12月前
|
算法 定位技术 C++
基本算法-回溯法(迷宫问题)
基本算法-回溯法(迷宫问题)
393 0
|
12月前
|
算法
算法:贪心算法的原理和基本思路
算法:贪心算法的原理和基本思路
|
4月前
|
存储 算法 C语言
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
62 1
|
算法 Python
使用深度优先搜索算法解决迷宫问题
迷宫问题是一个经典的算法问题,涉及到通过一个迷宫找到从起点到终点的路径。在本篇博客中,我们将探讨如何使用深度优先搜索(DFS)算法来解决迷宫问题。
285 2
|
12月前
|
算法 测试技术 C#
C++算法:存在负权边的单源最短路径的原理和实现
C++算法:存在负权边的单源最短路径的原理和实现
|
算法 Java
单源最短路径【学习算法】
单源最短路径【学习算法】
71 0
|
算法 前端开发 C++
拓扑排序详解(包含算法原理图解、算法实现过程详解、算法例题变式全面讲解等)
拓扑排序详解(包含算法原理图解、算法实现过程详解、算法例题变式全面讲解等)
722 0
|
存储 人工智能 算法
图的遍历算法
图的遍历算法
|
Java
数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题
数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题
82 0
数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题