[1707] 이분 그래프(DFS)

2023. 4. 12. 18:14·Coding Test/Graph
728x90
 

1707번: 이분 그래프

입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에

www.acmicpc.net

 

이분그래프

  • 각 집합에 속한 노드끼리 서로 인접하지 않는 두 집합으로 그래프의 노드를 나눌 수 있을 때

 

분석

  • 싸이클이 발생하지 않으면 탐색을 하면서 다음 노드를 이번 노드와 다른 집합으로 지정
  • 기존의 탐색 메커니즘에서 탐색한 노드에 다시 접근하게 됐을 때 현재 노드의 집합과 같으면 이분 그래프가 불가능
  • DFS를 실행할 때 현재 노드에서 연결된 노드 중 이미 방문한 노드가 나와 같은 집합이면 이분그래프가 아닌것으로 판별
  • 실행 결과가 이분그래프가 아니면 이후 노드는 탐색하지 않음

 

풀이

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 graph[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())
    graph=[[] 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())
        graph[start].append(end)
        graph[end].append(start)

    for i in range(1,v+1):
        if isEven:
            dfs(i)
        else:
            break

    # print(check)
    print("YES" if isEven else "NO")

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/Graph' 카테고리의 다른 글
  • [1976] 여행 가자(여행 계획, 유니온 파인드)
  • [2251] 물의 양 구하기 (물통, BFS)
  • [1325] 효율적인 해킹(BFS)
  • [18352] 특정 거리의 도시 찾기(다익스트라・heapq, BFS・deque)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BFS
    파이썬
    최소신장트리
    월간코드챌린지
    동적계획법
    알고리즘
    Algorithm
    조합
    힙
    최대공약수
    프로그래머스
    정렬
    DFS
    그래프
    트리
    스택
    이분탐색
    그리디
    큐
    자료구조
    구간합
    재귀
    LIS
    구현
    백준
    최단거리
    다익스트라
    덱
    DP
    플로이드워셜
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[1707] 이분 그래프(DFS)
상단으로

티스토리툴바