首页 > #网易笔试求问4题带障碍物的迷宫DFS为啥只能A 50%呀
头像
flyflyKite
发布于 2021-08-21 23:33
+ 关注

#网易笔试求问4题带障碍物的迷宫DFS为啥只能A 50%呀

这个为啥只能A 50%呀,看很多人说的dp,dp应该不对吧 ,dp只能向下和往右走,很明显不符合题意啊。我是用的dfs,不知道哪里写错了,麻烦帮我看看。感谢谢;
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * <p>
     * 计算最小航行费用
     *
     * @param input int整型二维数组 二维网格
     * @return int整型
     */
    int minRes = Integer.MAX_VALUE;
    int xx[] = {1, 0, -1, 0};
    int yy[] = {0, -1, 0, 1};
    int endX = 0, endY = 0;
    boolean[][] vis;

    public int minSailCost(int[][] input) {
        endX = input.length - 1;
        endY = input[0].length - 1; // write code here
        vis = new boolean[input.length][input[0].length];

        dfs(0, 0, 0, input);
        vis[0][0] = true;
        if (minRes == Integer.MAX_VALUE)
            return -1;
        else
            return minRes;
    }

    public void dfs(int x, int y, int ans, int[][] a) {
        if (ans > minRes)       // 已经有更小的了 ,剪枝直接返回
            return;
        System.out.println(x + " " + y + " " + ans);
        if (x == endX && y == endY) {       //到达重点
            minRes = Math.min(minRes, ans);
            System.out.println("------------------");
            return;

        }
        for (int i = 0; i < 4; i++) {
            int dx = x + xx[i];
            int dy = y + yy[i];

            if (dx >= 0 && dx <= endX && dy >= 0 && dy <= endY) {
                if (!vis[dx][dy] && a[dx][dy] != 2) {  //访问过或者是障碍物
                    vis[dx][dy] = true;
                    int cost = 1;
                    if (a[dx][dy] == 0)
                        cost = 2;
                    else if (a[dx][dy] == 1)
                        cost = 1;
                    dfs(dx, dy, ans + cost, a);
                    vis[dx][dy] = false;
                }
            }
        }
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        int[][] a = new int[][]{{1, 1, 1, 1, 0}, {0, 1, 0, 1, 0}, {1, 1, 2, 1, 1}, {0, 2, 0, 0, 1}};
        //int[][] a = new int[][]{{1, 1, 1, 1, 1}, {2, 2, 2, 2, 1}, {1, 1, 1, 1, 1}, {1, 2, 2, 2, 2}, {1, 2, 1, 1, 1}};
        System.out.println(sol.minSailCost(a));
    }
}


全部评论

(2) 回帖
加载中...
话题 回帖