LeetCode 286. Walls and Gates(墙与门)
来源:互联网 发布:淘宝详情页的制作步骤 编辑:程序博客网 时间:2024/05/21 19:33
原题网址:https://leetcode.com/problems/walls-and-gates/
You are given a m x n 2D grid initialized with these three possible values.
-1
- A wall or an obstacle.0
- A gate.INF
- Infinity means an empty room. We use the value231 - 1 = 2147483647
to representINF
as you may assume that the distance to a gate is less than2147483647
.
Fill each empty room with the distance to its nearest gate. If it is impossible to reach a gate, it should be filled with INF
.
For example, given the 2D grid:
INF -1 0 INFINF INF INF -1INF -1 INF -1 0 -1 INF INF
After running your function, the 2D grid should be:
3 -1 0 1 2 2 1 -1 1 -1 2 -1 0 -1 3 4
方法一:深度优先搜索。
public class Solution { private void tag(int[][] rooms, int row, int col, int dist) { if (row < 0 || row >= rooms.length || col < 0 || col >= rooms[row].length) return; if (rooms[row][col] == -1 || rooms[row][col] < dist) return; rooms[row][col] = dist; tag(rooms, row, col-1, dist+1); tag(rooms, row, col+1, dist+1); tag(rooms, row-1, col, dist+1); tag(rooms, row+1, col, dist+1); } public void wallsAndGates(int[][] rooms) { for(int row = 0; row < rooms.length; row ++) { for(int col = 0; col < rooms[row].length; col ++) { if (rooms[row][col] == 0) tag(rooms, row, col, 0); } } }}方法二:广度优先搜索
public class Solution { public void wallsAndGates(int[][] rooms) { Position start = new Position(0,0,0); Position tail = start; for(int row=0; row<rooms.length; row++) { for(int col=0; col<rooms[row].length; col++) { if (rooms[row][col]==0) { tail.next = new Position(row, col, 0); tail = tail.next; } } } Position current = start.next; while (current != null) { if (current.row >= 0 && current.row < rooms.length && current.col >= 0 && current.col < rooms[current.row].length && rooms[current.row][current.col] >= current.dist) { rooms[current.row][current.col] = current.dist; tail.next = new Position(current.row, current.col-1, current.dist+1); tail = tail.next; tail.next = new Position(current.row, current.col+1, current.dist+1); tail = tail.next; tail.next = new Position(current.row-1, current.col, current.dist+1); tail = tail.next; tail.next = new Position(current.row+1, current.col, current.dist+1); tail = tail.next; } current = current.next; } }}class Position { int row, col, dist; Position next; Position(int row, int col, int dist) { this.row = row; this.col = col; this.dist = dist; }}
0 0
- LeetCode 286. Walls and Gates(墙与门)
- Leetcode 286.Walls and Gates
- LeetCode 286. Walls and Gates
- Leetcode 286. Walls and Gates
- LeetCode 286. Walls and Gates
- *LeetCode-Walls and Gates
- Leetcode: Walls and Gates
- [leetcode] 286. Walls and Gates 解题报告
- [Leetcode] 286. Walls and Gates 解题报告
- 286. Walls and Gates
- 286. Walls and Gates
- leetcode 286: Walls and Gates
- [Leetcode 286]: Walls and Gates
- LeetCode 题解(259) : Walls and Gates
- [LeetCode286]Walls and Gates
- Walls and Gates
- Walls and Gates
- Walls and Gates
- TCP协议的学习(五)TCP中RST标志及其攻击
- 【VS】VS2010中如何更改项目名称
- C/C++什么是页抖动?
- uva101
- 22_广播接收者启动Activity
- LeetCode 286. Walls and Gates(墙与门)
- JAVA编程中关于toString()和new String()的区别
- Android开发中,有哪些让你觉得相见恨晚的方法、类或接口
- 从西直门立交桥谈IT架构与重构
- android国际化
- 23_System_arraycopy的使用
- 24_普通工厂设计模式
- 25_多个工厂方法模式
- Topcoder SRM 687 (Div 2) 250.Quorum __ sort