๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
#Stack #์คํ #์ฌ๊ท #์ํ #๋ฌดํ๋ฃจํํ์ถ #Back-Tracking
๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
#Queue #ํ
DFS์๊ณ ๋ฆฌ์ฆ์ ์์ฐจ๋ก ์ฐ์ต์ผ๋ก ์ด์ ์ต์ํด์ก๊ณ , BFS์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฒ ๋ฌธ์ ๋ก ์ฒ์ ์ ํ๊ฒ ๋์๋ค.
์ฐ์ , ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ์ฌ๋ฌ ์ฐจ๋ก ์ดํด๋ณด๋ 2๊ฐ์ง ํ์ด๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค.
๐๐ป ์์ด+DFS/BFS ๋ฑ ์ง๊ด์ ์ผ๋ก ์ฐ๊ฒฐ๋
ธ๋์ ๋ฒํธ๋ฅผ ์ด์ฉํ ๋
๐๐ป CYCLE ์ฌ๋ถ ๋ฅผ ํ์ธํ ๋
ex) 1-2-3 cycle๋ก ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด
amap = [[2,3], [1,3], [1,2]]
amap[1] = [2,3] #1๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค (idx == 1)
amap[2] = [1,3] #2๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค (idx == 2)
amap[3] = [1,2] #3๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค (idx == 3)
๐๐ป ๋ฏธ๋ก์ฐพ๊ธฐ, ์์ญ๊ตฌํ๊ธฐ ๋ฑ ๋งคํธ๋ฆญ์ค ํ์์ ์ด์ฉํ ๋
ex) 1-2-3 cycle๋ก ์ฐ๊ฒฐ๋์ด์์ผ๋ฉด
matrix = [[0,0,0,0], [0,0,1,1], [0,1,0,1], [0,1,1,0]]
matrix[1] = [0,0,1,1] #1๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค์ ๊ฐ์ (idx == 1)
matrix[2] = [0,1,0,1] #2๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค์ ๊ฐ์ (idx == 2)
matrix[2] = [0,1,1,0] #2๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋๋ค์ ๊ฐ์ (idx == 2)
์์ ์ค๋ช
ํ 2๊ฐ์ง ํ์ด๋ฐฉ๋ฒ์ผ๋ก ๋ค ํ์ด๋ณด์๋ค.
1. MAP์ ์ด์ฉํ ํ์ด
2. MATRIX๋ฅผ ์ด์ฉํ ํ์ด
import sys
from collections import deque
input = sys.stdin.readline
n,m,v = map(int, input().split())
node = [list(map(int, input().split())) for _ in range(m)]
amap = [[] for _ in range(n+1)]
#amap์ ๋งคํ
for x,y in node:
amap[x].append(y)
amap[y].append(x)
#amap ์ ๋ ฌ
for i in range(1,n+1):
amap[i].sort()
#DFS
d_visited = [False]*(n+1)
def dfs(v):
print(v, end=' ')
d_visited[v] = True #ํธ์ถ๋ v ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
for i in amap[v]: #amap[v]์ ์ ์ฅ๋ ๋
ธ๋๋ค ํ๋์ฉ
if not d_visited[i]: #๋ฐฉ๋ฌธ๊ฒ์ฌํ๋ฉด์
dfs(i) #DFS ํธ์ถ
#BFS
b_visited = [False]*(n+1)
def bfs(v):
queue = deque([v]) #ํ์ v ๋ฃ๊ธฐ
b_visited[v] = True #v ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
while queue: #ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
v = queue.popleft() #๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๋
ธ๋ ๊บผ๋ด๊ธฐ pop
print(v, end=' ') #์ ์
์ ์ถ์ด๋ฏ๋ก, pop๋ ๋
ธ๋ ์ถ๋ ฅ
for i in amap[v]: #amap[v]์ ์ ์ฅ๋ ๋
ธ๋๋ค ํ๋์ฉ
if not b_visited[i]: #๋ฐฉ๋ฌธ๊ฒ์ฌํ๋ฉด์
queue.append(i) #ํ์ ์ฝ์
ํ๊ณ
b_visited[i] = True #๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๊ธฐ
#์ด ๋ ํ๊ฐ ๋น์ง ์์์ผ๋ฉด ๋ค์ while queue์์ ๋ฐ๋ณต!!
dfs(v)
print()
bfs(v)
import sys
from collections import deque
input = sys.stdin.readline
n,m,v = map(int, input().split())
node = [list(map(int, input().split())) for _ in range(m)]
matrix = [[0]*(n+1) for _ in range(n+1)] #์ธ์ ํ๋ ฌ
#๋
ธ๋๋ค ๊ฐ ๊ฐ์ ์ 1๋ก ๋งคํ
for x,y in node:
matrix[y][x] = matrix[x][y] = 1
#DFS
d_visited = [False]*(n+1)
def dfs(v):
print(v, end=' ')
d_visited[v] = True
for i in range(1, n+1):
#i๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ํ์ฌ๋
ธ๋(v)์ i๋
ธ๋ ๊ฐ์ ์ ์ด ์์ ๊ฒฝ์ฐ dfsํธ์ถ
if not d_visited[i] and matrix[v][i]:
dfs(i)
##########################################################################
โvisited๋ฅผ 2์ฐจ์์ด ์๋๋ผ 1์ฐจ์๋ฐฐ์ด๋ก ์ง์ ํ๋ ์ด์
Map์ '๋
ธ๋'๊ฐ ์ค์ ์ธ ๋ฐ๋ฉด, Matrix๋ 0๊ณผ 1์ด ๋ชจ๋ '๊ฐ์ '์ด ์ฃผ์ฒด์ด๊ธฐ ๋๋ฌธ!
visited๋ฅผ 2์ฐจ์๋ฐฐ์ด๋ก ์ ์ํด๋ ์กฐ๊ฑด๋ฌธ์ ์ ์์ฑํ์ฌ ๊ฒ์ฌํ๋ฉด ๋๊ฒ ์ง๋ง,
1์ฐจ์๋ฐฐ์ด๋ก ์ ์ํ๋ฉด,
"if not visited[1]: " ๋ '๋
ธ๋'๊ฐ ์ฃผ์ฒด๊ฐ ๋์ด,
1๋ฒ '๋
ธ๋'์ ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง ๊ฒ์ฌํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๊ฐํธํจ
##########################################################################
#BFS
b_visited = [False]*(n+1)
def bfs(v):
queue = deque([v])
b_visited[v] = True
while queue:
v = queue.popleft()
print(v, end=' ')
for i in range(1, n+1):
if not b_visited[i] and matrix[v][i] == 1:
queue.append(i)
b_visited[i] = True
dfs(v)
print()
bfs(v)
๋์ ์๋ฆฌ๋ ์ ์ฝ๋์์ ์ค๋ช ํ์ผ๋ ์๋ตํ๋ค.