Leetcode 섬 수
문제 설명은 매우 간단합니다. 1과 0의 격자가 주어지면 주어진 격자에서 총 섬 수를 찾아야 합니다.
그들은 다음을 언급합니다.
An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
예를 들어:
Input: grid = [
["1","1","1","1","0"],
["1","1","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
]
Output: 1
또 다른 예:
Input: grid = [
["1","1","0","0","0"],
["1","1","0","0","0"],
["0","0","1","0","0"],
["0","0","0","1","1"]
]
Output: 3
어떻게 해결합니까?
내 접근 방식은 그리드의 각 (방문하지 않은) 셀을 보는 것입니다. 1을 포함하는 경우 이웃도 1을 갖는 한 (재귀적으로) 바깥쪽으로 확장합니다. 이를 BFS(폭 우선 검색)라고 합니다.
셀을 방문하면 나중에 다시 방문하지 않도록 해당 셀을 방문한 것으로 표시합니다.
해결책은 다음과 같습니다.
class Solution:
def numIslands(self, grid):
ROWS, COLS = len(grid), len(grid[0])
res = 0
visited = set()
def dfs(r,c):
if r<0 or c<0 or r>=ROWS or c>=COLS or (r,c) in visited or grid[r][c] != "1":
return
visited.add((r,c))
dfs(r+1,c)
dfs(r-1,c)
dfs(r,c+1)
dfs(r,c-1)
for r in range(ROWS):
for c in range(COLS):
if grid[r][c] == "1" and (r,c) not in visited:
res += 1
dfs(r,c)
return res
코드 자체도 매우 이해하기 쉽습니다. 도움이 되셨기를 바랍니다.
단순히 # 기호와 같은 기호로 1을 표시하여 방문 세트 사용을 피할 수 있습니다.
--
Unsplash에 있는 Sacha Gregoire의 표지 사진
Reference
이 문제에 관하여(Leetcode 섬 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/omkarscode/leetcode-number-of-islands-51dk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)