题解 | 迷宫寻路

迷宫寻路

https://www.nowcoder.com/practice/0c8930e517444d04b426e9703d483ed4?tpId=387&tqId=11262526&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D387

回溯函数只有9行代码,相当简洁并且思路清晰

import java.util.Scanner;

public class Main {
    static int n;
    static int m;
    static boolean visited[][];
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
         n=in.nextInt();
         m=in.nextInt();
        String temp=in.nextLine();
        char[][] arr=new char[n][m];
        visited=new boolean[n][m];
        for(int i=0;i<n;i++){
            arr[i]=in.nextLine().toCharArray();
        }
        if(dfs(arr,0,0)){
            System.out.println("Yes");
        }else{
            System.out.println("No");
        }
    }

    static boolean dfs(char[][] arr,int i,int j){
        if(i<0||i>=n||j<0||j>=m) return false;
        if(arr[i][j]=='#') return false;
        if(arr[i][j]=='.'&&i==n-1&&j==m-1) return true;
        if(visited[i][j]) return false;

        visited[i][j]=true;
        boolean found=dfs(arr,i-1,j)||dfs(arr,i+1,j)||dfs(arr,i,j-1)||dfs(arr,i,j+1);
        return found;
    }
}

在最后return 前,不需要visited[i][j]=false;因为可能出现环的情况,会一直转圈圈,导致StackOverFlow。

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-19 10:45
秋招路在何方:少了啊,我身边都是350000k*18,发三体货币
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务