| 문제

그래프 DFS 탐색 결과와 BFS 탐색결과 출력 정점 번호는 1번-N번

| 입력

첫줄 : N 정점의 갯수 M 간선의 갯수 V 탐색 시작 정점 번호
그다음줄 : 간선이 연결하는 두 정점의 번호

| 출력

DFS 출력결과 BFS 출력결과

| 예시 1(표)

input output
4 5 1
image
1 2 4 3
1 2 3 4

| 발상

DFS 출력하려면..

  • view 지났는지 안지났는지 확인
  • dfs 스택담기, 방문처리, 출력하기 BFS 출력하려면
  • bfs 큐담기, 방문처리, 출력하기 이 문제는 graph를 정리하는게 더 중요할지도..!
  • 톱니형 리스트 사용하기
  • 둘째줄부터 입력부터는 정렬을 하는게 좋을지도..!

| 풀이

from collections import deque
n, m, v = map(int, input().split())
#input 받기
graph=[]
for i in range(n+1):#grpah[0] 포함
  graph.append([])
print(graph)
#input 톱니형 리스트로 정리
for i in range(m):
  a,b = map(int,input().split())
  graph[a].append(b)
  graph[b].append(a)
print(graph)
# 정렬
for i in range(n+1):
  graph[i].sort()
print(graph)

dfsvisited = [False]* (n+1)
print(dfsvisited)
bfsvisited = [False]* (n+1)
def dfs(graph,v,dfsvisited):
  dfsvisited[v] = True
  print(v, end=' ')
  for i in graph[v]:
    if not dfsvisited[i]:
      dfs(graph,i,dfsvisited)

dfs(graph,v,dfsvisited)

def bfs(graph,start,bfsvisited):
  bfsvisited[start] = True
  queue = deque([start])
  while queue:
    currentNode = queue.popleft()
    print(currentNode,end =' ')
    for i in graph[currentNode]:
      if not bfsvisited[i]:
        bfsvisited[i] =True
        queue.append(i)
bfs(graph,v,bfsvisited)
  
  

댓글남기기