백준 1707 파이썬 모든 노드로 각각 DFS탐색
2024. 6. 5. 06:19ㆍ코딩 도구/백준
반응형
백준 1707 - 이분 그래프
문제
https://www.acmicpc.net/problem/1707
1707번: 이분 그래프
입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에
www.acmicpc.net

답안 코드 :
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N = int(input())
IsEven = True
def DFS(node):
global IsEven
visited[node] = True
for i in A[node]:
if not visited[i]:
check[i] = (check[node]+1)%2
DFS(i)
elif check[node] == check[i]:
IsEven = False
for _ in range(N):
V, E = map(int, input().split())
A = [[] for _ in range(V + 1)]
visited = [False] * (V + 1)
check = [0] * (V + 1)
IsEven = True
for i in range(E):
Start, End = map(int, input().split())
A[Start].append(End)
A[End].append(Start)
for i in range(1, V + 1):
if IsEven:
DFS(i)
else:
break
check[1] = 0
if IsEven:
print("YES")
else:
print("NO")
생각 :
# 문제 분석
# 생각해 보면 트리는 항상 이분 그래프가 된다
# 사이클이 발생하지 않으면 탐색하면서 다음 노드를 이번 노드와 다른 집합으로 지정하기
# 하지만 사이클이 발생하면 이분 그래프가 불가능 할 때가 있다.
# 문제 풀이
# 인접리스트로 그래프 구현
# 모든 노드로 각각 DFS탐색
# DFS로 이미 방문한 노드가 나와 같은 집합이면 이분 그래프 아닌 걸로
# 이분 그래프가 아니면 이후 노드는 탐색x
# DFS실행 이유
# 그래프의 모든 노드가 이어져 있지 않고
# 여러 개의 부분 그래프로 존재하는 케이스가 있을지도
그래프 표현 참고자료 블로그
그래프의 표현 (알고리즘, 자료구조)
그래프에 대해서 그래프는 노드와 에지로 구성된 집합이다. 노드는 데이터를 표현하는 단위이고 에지는 그 노드들을 연결한다. 그래프는 여러 알고리즘에 많이 사용되는 자료구조이므로 코딩
mkisos.tistory.com
반응형
'코딩 도구 > 백준' 카테고리의 다른 글
백준 6593 c++ 상범빌딩 (정육면체) (0) | 2025.02.11 |
---|---|
백준 2251 파이썬 BFS 과정 (0) | 2024.06.06 |
백준 18352 파이썬 BFS탐색 알고리즘 (2) | 2024.06.04 |
백준 1033 파이썬 DFS와 최대공약수 (3) | 2024.06.03 |
백준 1850 파이썬 최대 공약수를 유클리드 호제법 (17) | 2024.06.02 |