微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 BFS 打印最短路径

如何解决用 BFS 打印最短路径

我正在创建一个使用 Breadth First Search 算法的迷宫求解器,我想知道是否可以以某种方式在网格上打印路径,而不仅仅是打印它为了找到出口而行进的距离值。这是下面的代码,提前致谢。

    
    public List<Coords> solve(int x,int y) {
        Queue<Coords> q = new LinkedList<>();
        List<Coords> visited = new ArrayList<>();
        Coords start = new Coords(x,y);
        
        q.add(start);
        visited.add(start);
        
        while(!q.isEmpty()) {
            Coords get = q.poll();
            
            if(maze[get.x][get.y] == 3) {
                System.out.println("found an exit!");
                System.out.println("distance: " + get.dist);
                break;
            }
            
            if(!visited.contains(get)) {
                visited.add(get);
            }
            
            if(isValid(get.x-1,get.y)) {
                q.add(new Coords(get.x-1,get.y,get.dist+1));
            }
            if(isValid(get.x,get.y-1)) {
                q.add(new Coords(get.x,get.y-1,get.dist+1));
            }
            if(isValid(get.x+1,get.y)) {
                q.add(new Coords(get.x+1,get.y+1)) {
                q.add(new Coords(get.x,get.y+1,get.dist+1));
            }
            
            
        }
        return visited;
    }
    
}

输出是: found an exit! distance: 20

解决方法

我不确定我是否完全理解这个问题,但是您的 Queue<Coords> q 对象中不是已经有了这些数据吗?

如果是这样的话,那么你可以有这样的事情:


if (maze[get.x][get.y] == 3) {
    System.out.println("found an exit!");
    System.out.println("Distance: " + get.dist);
    for(Coords c : q) { 
        System.out.println(c); 
    }
    break;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。