Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 구현
- 브루트포스
- 다익스트라
- 투포인터
- 그리디
- 크루스칼
- 그래프 탐색
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- 그래프 이론
- 해시
- 자료구조
- join
- BFS
- 서브쿼리
- 다시
- 백트래킹
- 트리
- 분할정복
- 재귀
- 에라토스테네스의 체
- DP
- MST
- 시뮬레이션
- 누적합
- 수학
- DFS
- 우선순위큐
- GROUP BY
- 플로이드-워셜
Archives
- Today
- Total
기록하고 까먹지 말기
13023 본문
날짜 : 2023. 03. 20
사용 언어 : python
문제
코드
import sys
sys.setrecursionlimit(10**6)
n, m = map(int, sys.stdin.readline().split()) # 사람의 수, 관계의 수
graph = [[] for _ in range(n)]
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b) # 두 노드 연결
graph[b].append(a)
def dfs(now, depth):
visited[now] = True # 노드 방문처리
if depth == 5:
print(1) # 조건 만족 시 1 출력
exit()
for i in graph[now]:
if not visited[i]: # 방문하지 않았다면
dfs(i, depth + 1) # 재귀
visited[i] = False # 탐색 실패 -> 미방문 처리
return
for i in range(n):
if len(graph[i]) > 0:
visited = [False] * n
dfs(i, 1)
print(0)
풀이
- 전체 그래프에서 A, B, C, D, E가 서로 연결되어 있는 그래프를 찾는 것이다. 즉, 깊이가 4인 그래프를 찾는 문제였다.
- 그래서 각 노드별로 DFS를 수행하고, 조건에 맞는 경우 1을 출력한 후 프로그램을 끝내는 방식으로 코드를 작성한다.
- 다만, 탐색에 실패한 경우 다른 경우의 수를 찾아야 하기 때문에 dfs에서 탈출한 경우 해당 노드에 대해서는 방문처리를 False로 바꿈으로써 다른 경우의 수로 방문할 수 있도록 처리한다.
알게된 점
- DFS를 수행할 때 탐색을 실패한 케이스를 고려하지 못하고 코드를 작성해서 틀렸다.
반례
0 1
1 3
1 4
4 3
3 2
-> output : 1
참고 사이트
-