迷宫问题(回溯、栈)

2022-08-31 12:39:41

描述
定义一个二维数组 N*M ,如 5 × 5 数组下所示:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。

本题含有多组数据。

数据范围: 2<= n,m <=10, 输入的内容只包含 0 <= val <=1

输入描述:

输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

输出描述:
左上角到右下角的最短路径,格式如样例所示。

输入:
5 5
0 1 0 0 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
输出:
(0,0)
(1,0)
(2,0)
(2,1)
(2,2)
(2,3)
(2,4)
(3,4)
(4,4)

代码:

importjava.util.Arrays;importjava.util.Scanner;importjava.util.Stack;/**
 * @author gufusheng
 * @time 2021/11/17 20:05
 */publicclass HJ43{privatestaticint[][] graph;privatestaticint m,n;publicstaticvoidmain(String[] args){Scanner scanner=newScanner(System.in);while(scanner.hasNext()){
            n= scanner.nextInt();
            m= scanner.nextInt();

            graph=newint[n][m];for(int i=0; i< n; i++){for(int j=0; j< m; j++){
                    graph[i][j]= scanner.nextInt();}}Stack<Point> rout=newStack<>();setWay(0,0, rout);System.out.println("显示染色后的通路");for(int i=0; i< n; i++){System.out.printf(Arrays.toString(graph[i]));System.out.println();}System.out.println("路径输出");for(int i=0; i< rout.size(); i++){System.out.println("("+ rout.get(i).x+","+ rout.get(i).y+")");}}}/**
     * graph[i][j] = 2,表示可以通过
     */publicstaticbooleansetWay(int i,int j,Stack<Point> rout){if(graph[n-1][m-1]==2){returntrue;}if( i>=0&& i< n&& j>=0&& j< m&& graph[i][j]==0){
            graph[i][j]=2;// 假定该点可以走
            rout.push(newPoint(i,j));if(setWay(i+1, j, rout)){
                graph[i][j]=2;returntrue;}elseif(setWay(i, j+1, rout)){
                graph[i][j]=2;returntrue;}elseif(setWay(i-1, j, rout)){
                graph[i][j]=2;returntrue;}elseif(setWay(i, j-1, rout)){
                graph[i][j]=2;returntrue;}else{
                graph[i][j]=1;
                rout.pop();returnfalse;}}else{returnfalse;}}}classPoint{int x;int y;publicPoint(int x,int y){this.x= x;this.y= y;}}
  • 作者:会飞天的蜗牛
  • 原文链接:https://blog.csdn.net/he__xu/article/details/121394360
    更新时间:2022-08-31 12:39:41