题解 | #迷宫问题#

迷宫问题

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

import java.io.*;
import java.util.*;

class Point{
    int x;
    int y;

    Point(int x,int y){
        this.x = x;
        this.y = y;
    }
}

public class Main{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[][] num = new int[n][m];
            for(int i = 0; i < n; ++i){
                for(int j = 0; j < m; ++j){
                    num[i][j] = sc.nextInt(); 
                }
            }
            List<List<Point>> res = new ArrayList<>();
            dfs(num, 0, 0, n - 1, m - 1, new ArrayList<Point>(), res);
            int minSize = Integer.MAX_VALUE;
            int minIndex = 0;
            for(int i = 0; i < res.size(); ++i){
                if(minSize > res.get(i).si***Size = res.get(i).si***Index = i;
                }
            }
            for(Point p : res.get(minIndex)){
                System.out.println("("+ p.x + "," + p.y + ")");
            }
        }

    }
    public static void dfs(int[][] num, int i, int j, int n, int m, List<Point> list, List<List<Point>> res){
        if(i == n && j == m){
            // 走到尾部,添加节点
            list.add(new Point(i, j));
            // 添加到res中
            res.add(new ArrayList<>(list));
            return;
        }
        // 添加当前元素
        list.add(new Point(i,j));
        if((i + 1) <= n && j <= m && num[i + 1][j] == 0){
            // 移除添加到最后的一个元素
            dfs(num, i + 1, j, n, m, list, res);
            list.remove(list.size() - 1);
        }
        if(i <= n && (j + 1) <= m && num[i][j + 1] == 0){
            dfs(num, i, j + 1, n, m, list, res);
            list.remove(list.size() - 1);
        }
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务