当前位置:   article > 正文

CSDN竞赛—第69期—深度优先搜索

CSDN竞赛—第69期—深度优先搜索

题目:

二维地图heights,其中heights表示格子(row,col) 的高度。左上角格子(0,0)去右下角的格子 (rows-1, columns-1),每次可以往上,下,左,右四个方向之一移动,你想要找到H值最小的路径。一条路径的H值是路径上相邻格子之间高度差绝对值的最大值决定的。请你返回从左上角走到右下角的最小H值。

输入:heights = [[1,2,2],[3,8,2],[5,3,5]]

输出:2

算法思路:采用深度优先搜索算法,建立一个访问节点列表,采用递归的思路找路径,然后使用二分法找最小H值,Python代码如下:

  1. def dfs(row,col,heights,visited,mid):
  2. if row == len(heights)-1 and col == len(heights[0])-1:
  3. return True
  4. visited[row][col]=True
  5. directions=[(0,1),(0,-1),(1,0),(-1,0)]
  6. for dr,dc in directions:
  7. new_row,new_col = row+dr, col+dc
  8. if 0<=new_row<len(heights) and 0<=new_col<len(heights[0]) and not visited[new_row][new_col]:
  9. if abs(heights[new_row][new_col]-heights[row][col])<=mid:
  10. if dfs(new_row,new_col,heights,visited,mid):
  11. return True
  12. return False
  13. def minimun_max_height(heights):
  14. left,right = 0,max(map(max,heights))
  15. while left < right:
  16. mid = (left+right)//2
  17. visited = [[False]*len(heights[0]) for _ in range(len(heights))]
  18. if dfs(0,0,heights,visited,mid):
  19. right = mid
  20. else:
  21. left = mid+1
  22. return left
  23. if __name__ == "__main__":
  24. heights = eval(input())
  25. result = minimun_max_height(heights)
  26. print(result)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/695517
推荐阅读
相关标签
  

闽ICP备14008679号