반응형
문제
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
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 2644: 촌수계산 (실버2) (0) | 2023.04.07 |
---|---|
[백준|파이썬] 2178: 미로 탐색 (실버1) (0) | 2023.04.06 |
[백준|파이썬] 2606: 바이러스 (실버3) (0) | 2023.04.05 |
[백준|C++] 2750: 수 정렬하기 (0) | 2021.09.10 |
[백준|C++] 2869: 달팽이는 올라가고 싶다 (0) | 2021.09.02 |
[백준|C++] 10250: ACM 호텔 (1) | 2021.09.01 |