BOJ : DFS와 BFS [1260]
1. 문제
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
출처 : https://www.acmicpc.net/problem/1260
2. 아이디어
- BFS, DFS 개념 코드 응용
- 연결되어 있는 노드들을 문제에서 요구하는 입력으로 바꾼 후 개념 적용
3. 코드
mine
from collections import deque
def dfs(graph, v, visited):
# 현재 노드를 방문 처리
visited[v] = True
print(v, end=' ')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
def bfs(graph, start, visited):
# 큐 구현을 위해 deque 라이브러리 사용
queue = deque([start])
# 현재 노드 방문 처리
visited[start] = True
# 큐가 빌 때까지 반복
while queue:
# 큐에서 하나의 원소를 뽑아 출력하기
v = queue.popleft()
print(v, end= ' ')
# 아직 방문하지 않은 인접한 원소들을 큐에 삽입
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
n, m, v = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
x,y=map(int, input().split())
graph[x].append(y)
graph[y].append(x)
for g in graph:
g.sort()
visited=[False]*(n+1)
dfs(graph, v, visited)
print()
visited=[False]*(n+1)
bfs(graph, v, visited)
개념 설명 및 기본 코드 출처 : https://www.youtube.com/watch?v=PqzyFDUnbrY
Author And Source
이 문제에 관하여(BOJ : DFS와 BFS [1260]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@onejh96__/BOJ-단지번호붙이기-2667-kttwcwxk
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- BFS, DFS 개념 코드 응용
- 연결되어 있는 노드들을 문제에서 요구하는 입력으로 바꾼 후 개념 적용
mine
from collections import deque def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v] = True print(v, end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: dfs(graph, i, visited) def bfs(graph, start, visited): # 큐 구현을 위해 deque 라이브러리 사용 queue = deque([start]) # 현재 노드 방문 처리 visited[start] = True # 큐가 빌 때까지 반복 while queue: # 큐에서 하나의 원소를 뽑아 출력하기 v = queue.popleft() print(v, end= ' ') # 아직 방문하지 않은 인접한 원소들을 큐에 삽입 for i in graph[v]: if not visited[i]: queue.append(i) visited[i] = True n, m, v = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): x,y=map(int, input().split()) graph[x].append(y) graph[y].append(x) for g in graph: g.sort() visited=[False]*(n+1) dfs(graph, v, visited) print() visited=[False]*(n+1) bfs(graph, v, visited)
개념 설명 및 기본 코드 출처 : https://www.youtube.com/watch?v=PqzyFDUnbrY
Author And Source
이 문제에 관하여(BOJ : DFS와 BFS [1260]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@onejh96__/BOJ-단지번호붙이기-2667-kttwcwxk저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)