描述
现在有一个简易版的扫雷游戏。你将得到一个n*m大小的二维数组作为游戏地图。
每个位置上有一个值(0或1,1代表此处没有雷,0表示有雷)。
你将获得一个起点的位置坐标(x,y),x表示所在行数,y表示所在列数(x,y均从0开始计数)。
若当下位置上没有雷,则上下左右四个方向均可以到达,若当下位置有雷,则不能再往新的方向移动。
返回所有可以到达的坐标。
0 n,m =200.
答案返回一个任意顺序的数组,数组包括所有可以到达的位置坐标。
在线评测地址:领扣题库官网
样例1 [[1,0,0,0],[1,0,0,0],[0,1,1,1],[0,1,0,0]] [0,1] [[0,1]] [0,1]位置上是0,不能再往新的地方走,只能到达这一个位置
样例2 [[1,0,0,0],[1,0,0,0],[0,1,1,1],[0,1,0,0]] [1,0] [[0,0],[1,0],[1,1],[2,0],[0,1]] [1,0]位置上是1,所以可以走到[[0,0],[1,1],[2,0]],其中只有[0,0]位置上是1可以继续走到[0,1],然后不能再走了。
解法:
BFS (宽度优先搜索)
算法 / 数据结构:BFS / 队列
解题思路
首先将起点压入队列中,不断获取队首元素并弹出队列,判断当前点上下边界是否越界、是否为地雷、是否到达过,然后将下一个可到达的点压入队列中,直到队列为空。
复杂度分析:
时间复杂度:O(n*m)
n为矩阵的行,m为矩阵的列,最坏的情况就是所有点都要遍历一次。
空间复杂度:O(n*m)
n为矩阵的行,m为矩阵的列,最坏的情况就是所有点都要遍历一次,并记录在visited中。
源代码
public class Solution { * @param Mine_map: an array represents the map. * @param Start: the start position. * @return: return an array including all reachable positions. public List List Integer Mine_sweeping(int[][] Mine_map, int[] Start) { Queue List Integer queue = new LinkedList (); List List Integer answer = new ArrayList (); Map List Integer , Boolean visited = new HashMap (); int row = Mine_map.length; int col = Mine_map[0].length; queue.offer(Arrays.asList(Start[0], Start[1])); while (!queue.isEmpty()) { List Integer current = queue.poll(); int curX = current.get(0); int curY = current.get(1); answer.add(Arrays.asList(curX, curY)); if (Mine_map[curX][curY] == 0) { continue; visited.put(Arrays.asList(curX, curY), true); if (curX - 1 = 0 !visited.containsKey(Arrays.asList(curX - 1, curY))) { visited.put(Arrays.asList(curX - 1, curY), true); queue.offer(Arrays.asList(curX - 1, curY)); if (curX + 1 row !visited.containsKey(Arrays.asList(curX + 1, curY))) { visited.put(Arrays.asList(curX + 1, curY), true); queue.offer(Arrays.asList(curX + 1, curY)); if (curY - 1 = 0 !visited.containsKey(Arrays.asList(curX, curY - 1))) { visited.put(Arrays.asList(curX, curY - 1), true); queue.offer(Arrays.asList(curX, curY - 1)); if (curY + 1 col !visited.containsKey(Arrays.asList(curX, curY + 1))) { visited.put(Arrays.asList(curX, curY + 1), true); queue.offer(Arrays.asList(curX, curY + 1)); return answer; }
更多题解参考:九章官网solution
本文介绍了北京慧达天下如何使用运维编排OOS提高发布效率。 公司介绍 公司名称:...
hk 域名 哪里注册? .hk域名 在国内是可以注册的,只要提供了.hk 域名注册 服务...
作者 | 亮言 来源 | 阿里技术公众号 一 背景 订单状态流转是交易系统的最为核心...
约束与限制 只有运行中的云服务器云主机才允许用户登录。 Windows操作系统用户名...
我们知道效能提升 就是要应用系统方法实践和工具 通过它们改进技术、工程能力和...
本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家...
TOP云 (west.cn)1月25日消息,近日,功夫贷宣布获得4000万人民币A轮融资,本轮...
有很多人在听说大数据之后,会开始纠结JAVA与大数据的区别,甚至还在纠结Java和...
描述 你正在和你的朋友玩 猜数字 (Bulls and Cows)游戏:你写下一个数字让你的朋...
背景 2020年9月16日 Snowflake成功IPO 交易首日市场估值达到704亿美元 募集资金3...