ALGORITHM
[DFS/BFS] ๋ฐฑ์ค 1260 ๋ฌธ์ ํ์ด
์ก์ด ๐ซง
2020. 10. 26. 13:00
์์ ์์ ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ํํํ๋ฉด ์ด๋ ๊ฒ ๋๋ค. (์๋ฐฉํฅ์ด๋ฏ๋ก)
matrix[i][j]๋ผ๋ฉด i์์ j๋ฅผ ๊ฐ ์ ์์ผ๋ฉด 1, ์๋๋ฉด 0์ด๋ค.
def dfs(v): # v๊ฐ ์์์
print(v, end=' ')
visit[v] = 1 # ๋ฐฉ๋ฌธํ ์ 1๋ก
for i in range(1, n + 1):
if visit[i] == 0 and matrix[v][i] == 1: # ๋ฐฉ๋ฌธ์ ์์ง ์ํ๊ณ v์์ i๋ก ๊ฐ์์๋ค๋ฉด
dfs(i) # i๋ฅผ ๋ค์ v๋ก ํ๋ฉด์ dfs ๋ก ํ์
def bfs(v):
queue = [v] # ๋ค๋ ค์ผ ํ ์ ์ ์ฅ
visit[v] = 0 # ๋ฐฉ๋ฌธํ ์ 0์ผ๋ก( dfs๋ก ์ธํด 1๋ก ๋ฐ๋์ด ์์ผ๋ฏ๋ก)
while queue: # ํ๊ฐ ๋น ๋๊น์ง
v = queue.pop(0)
print(v, end=' ')
for i in range(1, n + 1):
if visit[i] == 1 and matrix[v][i] == 1:
queue.append(i) # bfs์ด๋ฏ๋ก ์ฒซ ์ ์์ ๊ฐ ์ ์๋ค๋ ๊ฑธ ํ์ธํ ๋๋ง๋ค queue์ push
visit[i] = 0
n, m, v = map(int, input().split())
matrix = [[0] * (n + 1) for i in range(n + 1)] # 0๋ถํฐ ์์ํ๋ฏ๋ก
visit = [0 for i in range(n + 1)]
for i in range(m):
x, y = map(int, input().split())
# ๊ฐ ์ ์๋ ์ ์ ์ 1๋ก ์ค์
matrix[x][y] = 1
matrix[y][x] = 1
dfs(v)
print()
bfs(v)