문제
<예제>
4 5 1 1 2 4 3
1 2 1 2 3 4
1 3
1 4
2 4
3 4
나의 해결
1. 행렬을 만든다, 방문 기록을 남길 visit 리스트를 만든다
2. dfs 는 재귀로,
방문한 적 없고, 행렬에서 인접행렬인지 확인 -> 맞으면 다시 dfs
3. bfs 는 스택을 활용하여
방문한 적 없고, 행렬에서 인접행렬인지 확인 -> 맞으면 스택에 append
def dfs(cur_node):
print(cur_node, end=' ')
visit_1[cur_node] = 1
for i in range(1, N + 1):
if visit_1[i] == 0 and s[cur_node][i] == 1:
dfs(i)
def bfs(cur_node):
queue = [cur_node]
while queue:
node = queue.pop(0)
print(node, end=' ')
visit_2[node] = 1
for i in range(1, N + 1):
if visit_2[i] == 0 and s[node][i] == 1:
if i not in queue:
queue.append(i)
N, M, L = map(int, input().split())
s = [[0] * (N + 1) for i in range(N + 1)]
visit_1 = [0 for i in range(N + 1)]
visit_2 = [0 for i in range(N + 1)]
for i in range(M):
x, y = map(int, input().split())
s[x][y] = 1
s[y][x] = 1
dfs(L)
print()
bfs(L)
visit_1, visit_2 두개의 리스트를 만들지않고
visit = [0, 0, 0, 0, 0]을 1로 바꿔서 체크도 가능
visit[node] = 0 # 방문 노드 체크
for i in range(1, N + 1):
if visit[i] == 1 and s[node][i] == 1: # 방문한 적 없는 인접 노드 방문
if i not in queue: # 같은 수가 들어가지 않도록
queue.append(i)

1260번 DFS, BFS