## 내 풀이
import sys
from collections import deque
n,m,v=map(int,sys.stdin.readline().split())
# n은 정점개수. m은 간선개수. v는 탐색 시작 노드.
graph=[[0]*(n+1) for i in range(n+1)]
visited=[0]*(n+1)
visited_bfs=[0]*(n+1)
# 0 노드는 제외하고 생각 (헷갈리지 않게 하기 위해)
queue=deque()
for i in range(m):
a,b=map(int,input().split())
graph[a][b]=graph[b][a]=1 # 서로 연결된 노드는 1로 표시한다.
def dfs(v):
visited[v]=True
print(v,end=' ')
for i in range(1,n+1):
if visited[i]==0 and graph[v][i]==1:
dfs(i)
def bfs(v): # bfs는 재귀 사용 X
queue.append(v) # 현재 노드를 저장.
visited_bfs[v]=True # 방문한 노드는 1로 표시
while queue:
x=queue.popleft()
print(x,end=' ')
for i in range(1,n+1):
if visited_bfs[i]==0 and graph[x][i]==1:
queue.append(i)
visited_bfs[i]=1 # 방문 노드 표시
dfs(v)
print()
bfs(v)
- bfs에서도 재귀문 쓰는 줄 알고 미친듯이 헤맸다.
- dfs에서만 재귀문 사용해서 탐색한 노드에서 더 깊게 탐색 수행.
- 연결된 노드들을 0,1로 나타내어 표현하는 방법 (중요)
https://www.acmicpc.net/problem/1260