递归解法

迷宫问题

http://www.nowcoder.com/questionTerminal/cf24906056f4488c9ddb132f317e03bc

递归解法。

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[][] num = new int[n+2][m+2];
            for(int i=0;i<m+2;i++){
                num[0][i] = 1;  // 第一行 最后一行为 1
                num[n+1][i] = 1;
            }
            for(int j=0;j<n+2;j++){
                num[j][0] = 1;
                num[j][m+1] = 1;
            }
            for(int i=1;i<n+1;i++){
                for(int j=1;j<m+1;j++){
                    num[i][j] = sc.nextInt();
                }
            }
            setWay(num,1,1,n,m);
            for(int i=1;i<n+1;i++){
                for(int j=1;j<m+1;j++){
                    if(num[i][j] ==2)
                        System.out.println("("+(i-1)+","+(j-1)+")");
                }
            }
        }
    }
    public static boolean setWay(int[][] num,int i ,int j,int a,int b){
        // 1 表示墙,2表示走且可以走,3表示走过走不通
        if(num[a][b] ==2){ // 右下角走通了
            return true;
        }else{
            if(num[i][j]==0){ // 0 可以走
                // 按照 下右上左
                num[i][j]=2;
                if(setWay(num,i+1,j,a,b)){
                    return true;
                }else if(setWay(num,i,j+1,a,b)){
                    return true;
                }else if(setWay(num,i-1,j,a,b)){
                    return true;
                }else if(setWay(num,i,j-1,a,b)){
                    return true;
                }else{  // 死路
                    num[i][j] = 3;
                    return false;
                }
            }else{ // map[i][j] !=0  1  2  3 
                return false;
            }
        }
    }
}
全部评论
你的代码的思路是对的,但是有问题,应该用一个栈来存储路径。直接用for循环输出路径是不对的,因为for循环扫描的时候是从左往右,从上往下。但是迷宫的路径不一定是左往右上往下。
1
送花
回复
分享
发布于 2021-08-14 11:32

相关推荐

4 收藏 评论
分享
牛客网
牛客企业服务