- 문제 : https://www.acmicpc.net/problem/1260
보기에는 간단한 것 같은데 생각을 좀 해야하는 문제였다.
문제 이해
- dfs, bfs 함수를 각각 구현해야 하는 문제이다.
- 각 함수에서 지나는 노드들을 dfs, bfs 별로 순차적으로 출력해야한다.
- 연결된 노드 중에서 작은 값 순서대로 진행해야 한다고 나와있어 각 graph 원소마다 sort()를 해줘야 한다.
- 지나는 노드들은 배열에 저장하는데 함수별로 arr_dfs, arr_bfs를 전역변수로 지정해 함수가 끝나도 배열이 유지될수 있게 한다.
- 배열은 [a, b, c] 형태인데 정답은 a b c 형태로 출력해야하므로 마지막에 for문으로 정답에 맞는 형식으로 출력한다.
- 각 함수마다 사용하는 visit가 다르므로 dfs, bfs 별로 visit를 따로 설정해줘야 한다.
정답 풀이
n, m, v = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
graph[a].sort()
graph[b].sort()
def dfs(node, arr, visit):
visit[node] = 1
for each in graph[node]:
if not visit[each]:
arr.append(each)
dfs(each, arr, visit)
def bfs(node, arr, visit):
queue = [node]
visit[node] = 1
while queue:
x = queue.pop(0)
for each in graph[x]:
if not visit[each]:
visit[each] = 1
arr.append(each)
queue.append(each)
arr_dfs = [v]
visit = [0] * (n + 1)
dfs(v, arr_dfs, visit)
arr_bfs = [v]
visit = [0] * (n + 1)
bfs(v, arr_bfs, visit)
for i in range(len(arr_dfs)):
print(arr_dfs[i], end = ' ')
print()
for i in range(len(arr_bfs)):
print(arr_bfs[i], end = ' ')
'백준 > Search' 카테고리의 다른 글
[bfs/백준] 2178번 : 미로 탐색 (0) | 2023.05.11 |
---|---|
[bfs/백준] 1012번 : 유기농 배추 (0) | 2023.05.10 |
[bfs/백준] 2644번 : 촌수계산 (0) | 2023.05.10 |
[이진탐색/백준] 1300번 : K번째 수 (0) | 2023.05.04 |
[이진탐색/백준] 2512번 : 예산 (0) | 2023.05.02 |