您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

DFS破解“迷宫问题”(洛谷P1605题题解,Java语言描述)

星拱北辰 发布时间:2020-03-13 00:08:08 ,浏览量:0

迷宫 题目要求

P1605题目链接 在这里插入图片描述

分析

我的思路还比较容易理解,但确实开的数组太多了(最终代码)。 我想开一个递归的DFS搜索,对越界情况进行淘汰 (话说这能算剪枝吗) ,再就是只允许在没被标记为已遍历的地方行进。 DFS用好了确实能搜出结果,但过程中遇到过一个大问题,下面就对此说明。

原先的代码是这样的:

import java.util.Scanner;

public class Main {

    private static int x1, y1, x2, y2;

    private static int dfs(int x, int y, boolean[][] graph) {
        if (x  x2 || y  y2 || graph[x][y]) {
            return 0;
        } else if (x == x2 && y == y2) {
            return 1;
        }
        graph[x][y] = true;
        return dfs(x-1, y, graph) + dfs(x+1, y, graph) + dfs(x, y-1, graph) + dfs(x, y+1, graph);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt(), n = scanner.nextInt(), num = scanner.nextInt();
        x1 = scanner.nextInt();
        y1 = scanner.nextInt();
        x2 = scanner.nextInt();
        y2 = scanner.nextInt();
        boolean[][] graph = new boolean[m+1][n+1];
        for (int i = 0; i             
关注
打赏
1660750074
查看更多评论
0.3174s