728x90
๐ ๋ฐฑ์ค 4963 - ์ฌ์ ๊ฐ์
๐ก ๋์ ํ์ด
BFS
ํน์ DFS
๋ง ์ ๊ตฌํํ ์ ์๋ค๋ฉด ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋๋ค. ๋ค๋ง, ๊ธฐ์กด ๋ฌธ์ ์์๋ ์, ํ, ์ข, ์ฐ ํจํด์ด ๋ฑ์ฅํ๋ค๋ฉด ์ด๋ฒ์๋ ๋๊ฐ์ ํจํด์ด ๋ฑ์ฅํ๋ค. ์ด์ ๋ฑ์ฅํ์ผ๋ ๋ค์ ์ธ ๊ฐ์ง ํจํด์ ์์๋ณด์.
728x90
- ์, ํ, ์ข, ์ฐ ํจํด
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
- ๋๊ฐ์ + ์, ํ, ์ข, ์ฐ ํจํด
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]
- ๋๊ฐ์ ํจํด
dx = [-1, -1, 1, 1]
dy = [-1, 1, -1, 1]
2๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ while
๋ฌธ ์ข
๋ฃ์กฐ๊ฑด์ ์
๋ ฅ์ด 0, 0
์ด์ด์ผ ํ๋๋ฐ, ์ด๋ if not w and not h
์กฐ๊ฑด์ ์ฃผ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ๋ ์ฌ๊ท ์ ํ์กฐ๊ฑด์ ํ์ด์ฃผ์.
import sys
sys.setrecursionlimit(5000000)
def dfs(x, y):
if 0 <= x < h and 0 <= y < w:
if graph[x][y] == 1:
graph[x][y] = 2
dfs(x-1, y-1)
dfs(x-1, y)
dfs(x-1, y+1)
dfs(x, y-1)
dfs(x, y+1)
dfs(x+1, y-1)
dfs(x+1, y)
dfs(x+1, y+1)
return True
return False
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [-1, 0, 1, -1, 1, -1, 0, 1]
while True:
w, h = map(int, input().split())
if not w and not h:
break
graph = [list(map(int, input().split())) for _ in range(h)]
cnt = 0
for i in range(h):
for j in range(w):
if graph[i][j] == 1:
dfs(i, j)
cnt += 1
print(cnt)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1743 - ์์๋ฌผํผํ๊ธฐ (BFS) (0) | 2021.04.22 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1303 - ์ ์ - ์ ํฌ(BFS) (3) | 2021.04.21 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4963 - ์ฌ์ ๊ฐ์(BFS) (0) | 2021.04.20 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 7576 - ํ ๋งํ (BFS) (0) | 2021.04.20 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1926 - ๊ทธ๋ฆผ(BFS) (0) | 2021.04.20 |
๋๊ธ