본문 바로가기
Problem Solving/백준

[백준|파이썬] 1260: DFS와 BFS (실버2)

by 청량리 물냉면 2023. 4. 5.
반응형
문제

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

 

🐍파이썬
import sys

N, M, V = map(int,sys.stdin.readline().split())
graph = [[] for _ in range(N + 1)]

for i in range(M):
    a, b = map(int,sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)
    
for i in graph:	#숫자가 낮은 노드부터 탐색시키기 위해 정렬
      i.sort()

def DFS(v):
    visited[v] = True	#노드v 방문처리
    print(v, end=' ')	#방문한 노드 출력
    for i in graph[v]:	#노드v와 연결된 모든 노드에 대해
        if not visited[i]:	#노드i에 방문한 적이 없다면
            DFS(i)	#노드i를 기준으로 깊이탐색

def BFS(start):
    queue.append(start)	#큐에 시작노드 삽입
    visited[start] = True	#시작노드 방문처리
    while queue:	#큐가 빌때까지 반복
        v = queue.pop(0)	#큐의 가장 왼쪽에서 원소 하나를 꺼냄
        print(v, end=' ')	#꺼낸 원소를 출력
        for i in graph[v]:	#꺼낸 원소와 연결된 모든 노드에 대해
            if not visited[i]:	#i에 방문한 적이 없다면
                queue.append(i)	#i를 큐에 넣기
                visited[i] = True	#i를 방문처리

visited = [False] * (N+1)
DFS(V)

print()

queue = []
visited = [False] * (N+1)
BFS(V)

 

 

참고한 블로그

풀이 참고

https://ji-gwang.tistory.com/291

 

백준 1260번 파이썬 문제풀이(큐와 그래프 - DFS와 BFS)

해당 문제는 DFS와 BFS의 기본개념을 이해하기 좋은문제이다. DFS는 재귀로 구현하는게 보통이고 BFS는 queue로 구현하는게 보통이다. 또한 입력받은 노드의 개수만큼 이차원 리스트로(이차원 리스

ji-gwang.tistory.com

 

이론 참고

https://vanillacreamdonut.tistory.com/214

 

[Python] DFS / BFS 정리

🌝BFS : 너비우선탐색 가까운 노드부터 탐색하는 알고리즘 선입선출 방식인 큐 자료구조를 이용 🌜동작 방식 1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 2. 큐에서 노드를 꺼내 해당

vanillacreamdonut.tistory.com

 

반응형