问题来源:地图分析

问题描述:你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。

我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - x1| + |y0 - y1| 。

如果我们的地图上只有陆地或者海洋,请返回 -1。

例子
输入:
[[1,0,1],
[0,0,0],
[1,0,1]]
输出:2
解释:
海洋区域 (1, 1) 和所有陆地区域之间的距离都达到最大,最大距离为 2。

思路:以所有的陆地为中心,做广度搜索,每前进一步记下步数,这样广度搜索结束步数即为最大距离。参考@lucifer的解答。

class Solution:def maxDistance(self, grid: List[List[int]]) -> int:n = len(grid)steps = -1# 挑出所有的陆地queue = [(i, j) for i in range(n) for j in range(n) if grid[i][j] == 1]# 极端情况if len(queue) == 0 or len(queue) == n ** 2: return -1# 广度搜索while queue:for _ in range(len(queue)):x, y = queue.pop(0)for xi, yi in [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]:if xi < n and yi < n and xi > -1 and yi > -1 and grid[xi][yi] == 0:queue.append((xi, yi))grid[xi][yi] = -1steps += 1return steps

地图分析--广度搜索相关推荐

  1. 二叉树的前序中序后序递归查找,深度,广度搜索C++实现(VS2017)

    一.图和运行结果如下 二.代码如下: #include<iostream> #include<string> #include<fstream> #include& ...

  2. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc

    C语言实现的图的深度搜索与广度搜索程序 C语言实现的图的深度搜索与广度搜索程序 /* 上机试验5-图的建立和遍历 1)建立[无向][非连通]图的邻接表存储结构,要求顶点个数不少于15个. 2)用DFS ...

  3. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  4. 深度搜索(DFS)和广度搜索(BFS)

    深度搜索(DFS) 一.搜索方法:  沿出发顶点的第一条路径尽量深入,遍历路径上所有顶点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没 ...

  5. 【数据结构】无向图的遍历(广度搜索和深度搜索)

    说明 以邻接表作为存储结构 以用户指定的结点分别进行广度搜索和深度搜索 相应的生成树的边集 运行截图 源代码 import java.util.*;public class AdjacencyList ...

  6. 深度搜索和广度搜索特点的深刻理解

    问题提出: 考虑如下图所示的简单图所表示的缅因州的道路系统.在冬天里保持道路通路通畅的唯一方式就是经常扫雪.高速公路部分希望只扫尽可能少的道路上的雪,而确保总是存在连接任何两个乡镇的干净道路.如何才能 ...

  7. 人、狼、羊、白菜过河问题(广度搜索)

    人.狼.羊.白菜过河问题(广度搜索) 大家好,我是小白莲,今天小白莲给大家分享的是广度搜索的应用之人.狼.羊.白菜过河问题,相信大家在小时候都听过这个有趣的思考题,没听过也没关系,大概是这样的: 初始 ...

  8. 广度搜索与深度搜索的区别

    广度搜索(Breadth-First Search,BFS)是一种基于图的遍历算法,它按照广度优先的方式遍历图中的所有节点.具体来说,该算法从起点开始向外扩展,先遍历起点所有直接相邻的节点,然后再遍历 ...

  9. 【人工智能】八数码问题:广度搜索、深度搜索

    应用广度搜索BFS和深度搜索DFS解决八数码问题,广度搜索和深度搜索都是盲目搜索,相关理论知识,算法过程:问题求解:状态空间图和盲目搜索. 参考:7种方法求解八数码问题 Python实现A*算法解决N ...

最新文章

  1. string:值类型?引用类型?[转]
  2. unity开宝箱动画_unity简单动画实现
  3. centos 7 yum 安装 MongoDB 4.2
  4. android 设置Button或者ImageButton的背景透明 半透明 透明
  5. jdbc java_Java中使用JDBC
  6. ue4玻璃材质_UE4-材质
  7. 40年技术发展变革,物联网行业的趋势、现状与挑战
  8. Linux分区之parted命令
  9. context c语言作用,理解 Go context
  10. 不玩游戏,何谈人生!
  11. 小工具:(求ASCII码值)
  12. springboot如何访问html页面,Springboot访问html页面的教程详解
  13. 《御制皇陵碑》(明)朱元璋 撰
  14. SuperMap云许可配置
  15. navicat导入excel文件的步骤以及可能碰到的问题
  16. 什么是Bom,常用的bom属性又有哪些?
  17. ssm水果商城项目遇到的问题和解决
  18. Method类的使用
  19. 训练好的深度学习模型是怎么部署的?
  20. Centos 7 Authorization failed. Make sure polkit agent is running or run the application as superuser

热门文章

  1. 软件工程导论 05章总体设计
  2. 计蒜客2019蓝桥杯省赛 B 组模拟赛(一)轻重搭配|
  3. 5. 直接三角形分解法
  4. 《深度学习笔记》——“损失函数loss乘以正数因子a是否等价于学习率lr乘以a呢?”
  5. CNN中卷积的学习笔记
  6. python dataframe中缺失值处理
  7. 【PAT】1001 害死人不偿命的(3n+1)猜想
  8. tensorflow代码中的一个bug
  9. C# Winform代码片段-大二下学期的垃圾代码
  10. 移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析