1. 문제

 

2. 아이디어

graph리스트에 정점들을 입력받아 dfs와 bfs를 적용한다.

 

3. 코드 요약

- 입력

(모두 int형)

n : 정점 개수

m : 간선 개수

v :  시작 정점 번호

 

a, b : 간선이 연결하는 두 정점 번호 (m개 줄 입력)

 

- 변수

visited : False로 (n+1) 범위

graph : [ ] (n+1) 범위 리스트

*graph 리스트에 정점과 연결되는 정점들 넣어주기

graph[a].append(b)

graph[b].append(a)

*정점 번호가 작은 것부터 방문 (정렬)

graph[i].sort()

 

- 함수

dfs 함수

: 현재 정점 visited True 후 정점 출력

현재 정점과 연결된 정점 중 visited가 False인 정점에 대해 dfs 재귀함수 호출

 

bfs 함수

: collection deque 라이브러리 필요

queue 선언

현재 정점 visited True

queue가 있으면 맨 왼쪽 원소를 popleft 후 출력

출력 정점과 연결된 정점이 False면 queue에 넣고 visited True

 

- 출력

dfs 출력 후 visited가 재사용 되기 때문에 False로 초기화 한 다음 bfs를 출력한다.

 

4. 전체 코드

from collections import deque

n,m,v=map(int,input().split())
visited=[False]*(n+1)

graph=[[] for _ in range(n+1)]


for _ in range(m):
    a,b=map(int,input().split())
    graph[a].append(b)
    graph[b].append(a)

for i in range(len(graph)):
    graph[i].sort()

def dfs(v):
    visited[v] = True
    print(v, end=' ')
   
    for i in graph[v]:
        if not visited[i]:
            dfs(i)

def bfs(v):
    queue = deque([v])
    visited[v]=True

    while queue:
        v=queue.popleft()
        print(v, end=' ')

        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i]=True

dfs(v)
visited=[False] * (n+1)
print()
bfs(v)

'알고리즘' 카테고리의 다른 글

BFS  (0) 2022.09.05
DFS  (0) 2022.09.04
Queue  (0) 2022.09.04
Stack  (0) 2022.09.04
트리(Tree)  (0) 2022.04.16

+ Recent posts