当前位置: 首页 > 知识库问答 >
问题:

使用递归从左上方到右下方找到网格中的第一条路径

吕俊才
2023-03-14

我尝试使用递归从网格的左上角移动到右下角。然而,在每一个时间点,我只能向上、向下、向左或向右移动我所站的数字所给出的正方形数。

举个例子,如果你站在一个3上,我可以向左移动三个格子,向右移动三个格子,向上移动三个格子,或者向下移动三个格子。我不能离开棋盘。

我试图寻找一个起点,但我是空白的。有人可以帮忙吗?

        public int traverse(int[][] grid, int size, int x, int y){

            // base condition
            if(x == size-1 & y == size-1)
                return 0;

            // value of current square
            int square = grid[y][x];

            // move right
            if(x + square < size)
                return square + traverse(grid, size, x + square, y);

            // move down
            if(y + square < size)
                return square + traverse(grid, size, x, y + square);

            // move left
            if(x - square > -1)
                return square + traverse(grid, size, x - square, y);

            // move up
            if(y - square > -1)
                return square + traverse(grid, size, x, y - square);

            return 0;
        }

共有1个答案

孔琪
2023-03-14

您需要任务的DFS,它还可以跟踪当前访问的路径。这是一个简单的Python实现,可以很容易地在其他语言中进行优化和实现。

def dfs(i, j, matrix, visited, path):
    # check if current point if out of bounds
    if i < 0 or i> len(matrix):
        return []
    if j < 0 or j> len(matrix[0]):
        return []
    
    # check if current point has been visited earlier
    if visited.get((i,j)):
        return visited[(i,j)]

    # add current point to path
    new_path = path + [(i,j)]

    # check if we've reached bottom right point
    if i==len(matrix)-1 and j == len(matrix[0])-1:
        return new_path
    
    # so that dfs doesn't get stuck in infinite recursion for cycles
    visited[(i,j)] = []

    value = matrix[i][j]
    possible_paths = [
        dfs(i+value,j,matrix,visited,new_path),
        dfs(i-value,j,matrix,visited,new_path),
        dfs(i,j+value,matrix,visited,new_path),
        dfs(i,j-value,matrix,visited,new_path)
    ]

    for option in possible_paths:
        if option:
            # we have found a path
            visited[(i,j)] = option
            return option
    
    #no path found
    return []
 类似资料:
  • 问题内容: 我正在尝试将元素的位置增加 x个 像素。到目前为止,这是我尝试过的: 我知道这行不通,但是我想知道是否有可能像这样增加位置值。 问题答案: 因为它是一个以结尾为单位的字符串,就像只有将数字部分转换为实际数字时才可以对它进行数学运算。 假设您有一个定位的元素(因此设置值会做些事情),并且已经在元素上直接设置了样式(而不是通过CSS设置)(因此获取实际上会为您带来一些东西),则可以通过解析

  • 谢了! 插图图像

  • 如您所见,GravityCompat不允许我放右而不是结束或开始,如果我把它放入XML中,它就会崩溃。 出现下一个错误:

  • 问题内容: 是否有更改此文本的CSS代码 到这个 问题答案: 尝试这个 编辑:将此类应用于段落标记,您应该得到想要的结果。

  • 我读过segues上的其他帖子,但没有一篇能解决我的问题。 简单地说,我的ViewController就像一本书一样被订购。我希望从左到右的向后过渡(例如:从第9页到第8页)始终存在(滑动)。我想从右到左向前过渡(从第9页到第10页)。 是的,如果您一页接一页地分页,我的导航控制器后退按钮(左上角)会显示为这样。但是,如果您从索引跳入,那么导航控制器上的后退功能会将您带回索引。 我的目标是,如果用

  • 我正在尝试做一个简单的游戏,在游戏中,当按钮被点击时,一条船从一个海岸驶向另一个海岸。我尝试使用jQuery,但它没有像预期的那样工作。 哈巴狗 萨斯 jQuery 问题是当船回到起始位置时,它会比原来的位置走得更远。 有谁能帮帮我吗? 代码笔链接