2020. 8. 25. 18:28ใ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค/DFS,BFS
DFS๋ฌธ์ (์๋ฃ์ ์ผ๋ ค ๋จน๊ธฐ) - ์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค
N x M ํฌ๊ธฐ์ ์ผ์ ํ์ด ์๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ์ 0, ์นธ๋ง์ด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ 1๋ก ํ์๋๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ๋ผ๋ฆฌ ์, ํ, ์ข, ์ฐ ๋ถ์ด ์๋ ๊ฒฝ์ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ด๋ ์ผ์ ํ์ ๋ชจ์์ด ์ฃผ์ด์ก์ ๋ ์์ฑ๋๋ ์ด ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ค์์ 4 x 5 ์ผ์ ํ ์์์์๋ ์์ด์คํฌ๋ฆผ์ด ์ด 3๊ฐ ์์ฑ๋๋ค.
0 | 0 | 1 | 1 | 0 |
0 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
์ ๋ ฅ ์กฐ๊ฑด:
- ์ฒซ ๋ฒ์งธ ์ค์ ์ผ์ ํ์ ์ธ๋ก ๊ธธ์ด N๊ณผ ๊ฐ๋ก ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค.(1 <=N, M <=1,000)
- ๋ ๋ฒ์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง ์ผ์ ํ์ ํํ๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ ๊ตฌ๋ฉ์ด ๋ซ๋ ค์๋ ๋ถ๋ถ์ 0, ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ 1์ด๋ค.
๋ฌธ์ ์ ํด๊ฒฐ ํค์๋๋ DFS์ด๋ค. 0๋ผ๋ฆฌ๋ ์ด์ด์ ธ์์ผ๋ฏ๋ก ์ด์ด์ ธ์์ง ์๋ ๊ณณ๊น์ง ํ์์ ํ ๋ค, count๋ฅผ ์ฌ๋ ค์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ๋ ๊ตฌํ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ป๊ฒ ๊ตฌํํด์ผํ ๊น?
1. visited๋ผ๋ True or False๋ฆฌ์คํธ๋ฅผ ๊ตณ์ด ์ ์ฌ์ฉํด๋ ๋๋ค. ์ซ์๊ฐ 1์ผ ๊ฒฝ์ฐ False๋ฅผ ๋ฐํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
2. dfs์ ํจ์์ธ์์ x์ y๋ฅผ N x M ๋งํผ ์ฃผ๋ฉด์ graph[x][y]๊ฐ True๊ฐ ๋ ์์ count๋ฅผ ํ๋ ์ฌ๋ฆด ๊ฒ์ด๋ค. graph[x][y]๊ฐ True๊ฐ ๋์๋ค๋ ๊ฒ์ dfsํจ์ ๋ด๋ถ์์ ๊ฐ ์ ์๋ ๋ชจ๋ ๊ณณ์ ๋ค ๋ค๋ ์ ๋ True๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋๋ ์๋์ ๊ฐ๋ค.
n,m = map(int,input().split())
graph = []
for i in range(n):
graph.append(list(map(int,input())))
def dfs(x,y):
if x <= -1 or y <= -1 or x >=n or y >=m :
return False
if graph[x][y] == 0:
graph[x][y] = 1
dfs(x-1,y)
dfs(x+1,y)
dfs(x,y-1)
dfs(x,y+1)
return True
return False
count =0
for i in range(n):
for j in range(m):
if dfs(i,j) == True:
count += 1
print(count)
map(int, input().split()) --> ๊ณต๋ฐฑ์ ํตํด ์ ๋ ฅ์ ๋ฐ์ ๋ค int๋ก
list(map(int,input())) --> list๋ฅผ ๋ฐ๋๋ฐ ์ ๋ ฅ์ ๋ฐ์ ๋ค int๋ก
์ ์์ dfs(x-1,y) , dfs(x+1,y), dfs(x,y-1), dfs(x,y+1)์ for k in range(4)๋ก ํด์ nx = x + dx[i], ny = y+ dy[i]๋ฅผ ํด๋ณด์๋๋ ๋์ง ์์๋ค. ์กฐ๊ฑด์ ๋ฌธ์ ๊ฐ์๋๊ฑธ๊น? ํ์์๋ ์ ๋ฌํ ์์ ์ฌ์ฉํ๋๋ฐ ์ฌ๊ธฐ์๋ ์์ฐ๋ ์ด์ ๋ฅผ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
'์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BFS ๋ฌธ์ (๋ฏธ๋ก ํ์ถ) - ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค (0) | 2020.08.25 |
---|---|
DFS(๊น์ด ์ฐ์ ํ์), BFS(๋๋น ์ฐ์ ํ์) (0) | 2020.08.25 |