Wang SY 2024-03-30 20:57 采纳率: 92.3%
浏览 7

为什么此题我的代码输出一直是-1呢?我自己根本找不出问题

为什么我的代码输出一直是-1呢?想了好久都没想明白,根本找不出问题所在,有没有人能帮我看看我的代码问题出在哪里?
题目来源是蓝桥云课-13.穿越雷区
链接:https://www.lanqiao.cn/problems/141/learning/?page=1&first_category_id=1&tag_category_id=36

img

img


我的代码如下:

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 20:59
    关注

    引自免费微信小程序:皆我百晓生

    在Python中,实现从给定的矩阵 A 到 B 的最小移动步数路径可以通过动态规划算法解决。以下是一个可能的实现方法:

    首先,我们需要定义一个函数 min_path(matrix, row, col) 来计算从矩阵的第 i 行、第 j 列到达矩阵中心的最小移动步数。

    def min_path(matrix, row, col):
        visited = set()
        dist = [float('inf')] * len(matrix)
    
        # 初始化状态
        dist[row][col] = 0
        
        # 计算所有可能的路径长度
        for path in generate_paths(matrix, row, col, visited):
            step = 0
            for i in range(len(path)):
                for j in range(len(path[0])):
                    if path[i][j] != matrix[row][col]:
                        break
                    if matrix[row][col] == '+':
                        step += abs(path[i][j])
                    else:
                        step -= abs(path[i][j])
    
                    if step < dist[row][col]:
                        dist[row][col] = step
    
        return dist[row][col]
    

    然后,在主程序中调用上述函数,并处理输入和输出:

    n = int(input())
    matrix = []
    for _ in range(n):
        row = input().split()
        matrix.append([int(i) for i in row])
        
    solution = min_path(matrix, 0, n - 1)
    print(solution)
    

    generate_paths() 函数用于生成从矩阵的第 i 行、第 j 列到达矩阵中心的所有可能路径。这个函数采用回溯法的方法,递归地遍历所有可能的路径,根据每个元素和当前路径是否重复来更新路径长度。

    min_path() 函数中,我们首先初始化 visiteddist 集合,其中 visited 包含当前访问过的坐标,dist 包含已找到的最小路径长度。然后,我们将 dist[row][col] 初始化为 0,因为从任何位置到达中心路径都需要移动偶数步。

    接下来,我们迭代所有可能的路径,从每个路径开始。对于每一步,我们都遍历当前路径上的每个元素。如果是正值,我们就向左移动,如果为负值,我们就向右移动。我们同时考虑两种情况:若当前元素与当前位置相同,则不需要移动,否则,我们需要计算路径长度并将其加入到结果数组中。如果当前元素是 '+',我们向其加一,否则,我们向其减一。最后,我们检查是否有更短的路径可用,如果有,则更新 dist[row][col]

    visiteddist 集合为空时,表示所有的路径都已经搜索完毕,此时 solution 就是最小路径的长度。因此,我们返回 dist[row][col]

    需要注意的是,由于我们需要查找的是从某个特定位置 (A,B) 到另一个指定位置 (C,D) 的路径,所以我们在 generate_paths() 函数中首先检查 matrix[row][col] 是否是 '+',如果是,那么就跳过当前路径。这是为了避免路径长度为负的情况。

    最后,我们在 min_path() 函数内部调用了 generate_paths() 函数,并打印出路径长度,以供后续检查和验证。如果我们需要绘制图形来可视化路径,请提供需要绘图的区域以及所需的工具(例如,matplotlib库),以便我可以帮助您完成此任务。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月30日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见