자고일어나니코딩왕
자일코의 CODING
자고일어나니코딩왕
전체 방문자
오늘
어제
  • 분류 전체보기 (64)
    • [Linux]리눅스 (1)
    • [NETWORK]네트워크 (17)
    • [PS] 알고리즘문제풀이 (16)
    • [SQL] (13)
    • [ALGORITHM]알고리즘개념 (9)
    • [DATA_STRUCTURE]자료구조 (1)
    • [PYTHON]파이썬 (0)
    • [정보처리기사] (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • virtualbox
  • 리눅스 #파일시스템 #디렉토리
  • ssh
  • BIOS #MBR #LILO #Kernel #init
  • 리눅스
  • 원격접속

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
자고일어나니코딩왕

자일코의 CODING

[백준,PS,그래프탐색][PYTHON] #13265. 색칠하기
[PS] 알고리즘문제풀이

[백준,PS,그래프탐색][PYTHON] #13265. 색칠하기

2020. 6. 10. 03:43

from collections import deque


def bfs(x):#색칠비교 + BFS
    global stop
    q.append(x)#큐에넣어주고
    visited[x] =1#방문한 초기설정
    color[x] = 1 #색깔이 1이라고 가정 다음 인접한 노드들은 색깔들이 2여야한다.
    
    while q:
        x = q.popleft() # 한가지를 pop하고
        
        for i in range(len(a[x])): #반복문이 도는 이유는 인접한 모든 노드들에관하여야 하기때문에
            w = a[x][i] #i번째 인접노드
            if ( visited[w] == 0 ): #방문을 아직 하지않은노드라면? - >방문하고 색깔을 바꿔야한다.ex이전이 1이었으면 다음은 2 2였으면 다음은 1
                visited[w] = 1#방문함을 알리고
                if ( color[x] == 1):#현재 색깔이 1이라면
                    color[w]= 2#다음은 2가되어야함
                else:#현재 색깔이 2라면
                    color[w] =1#다음은 1이되어야함
                q.append(w) #다했다면 인접노드들을 다시 큐에 추가시켜야한다.
            
            
            if (visited[w] ==1  and color[x] ==color[w]): #내가 방문한 전노드랑 색깔이 같을때
                
                stop +=1 #플래그를 위해서
                
                return -1
                
test_case = int(input())

for  _ in range(test_case):
    
    vertex , edge = map(int, input().split())
    a =[ [] for _ in range(vertex+1)]
    color =[ 0 for _ in range(vertex+1)]#+1해준것은 1번노드 그래프가 0번 인덱스 보다는 1번인덱스에 저장되게 하기위해서
    visited= [0 for _ in range(vertex+1)]
    stop =0
    q = deque() #deque 라이브러리
    for i in range(edge):
        x,y = map(int, input().split())
        a[x].append(y)
        a[y].append(x)#교차되는것은 쌍방이기때문에
        
    
    bfs(1)
    
    for i in range(len(color)): #input case 중에서 끊어진 그래프가 나올수 있기 때문에  그렇다면 bfs시작점을 한번더 추가시켜야되기 때문이다.
        if color[i] ==0:# BFS가 한번에 전부다 이루어 져야한다는 편견을 버리자.
            bfs(i)

    if(stop ==0): #stop 플래그 설정
        print("possible")
    else:
        print("impossible")
    
  

'[PS] 알고리즘문제풀이' 카테고리의 다른 글

[백준,PS,BFS][PYTHON] #2178 . 미로탐색  (0) 2020.06.15
[백준,PS,그래프탐색][PYTHON] #1707. 이분그래프  (0) 2020.06.10
[백준,PS,그래프탐색][PYTHON] #2606. 바이러스  (0) 2020.06.10
[백준,PS,재귀,DP,삼성SW][PYTHON] #14501. 퇴사  (0) 2020.05.16
[프로그래머스,PS,스택,큐][PYTHON] #1. 탑  (0) 2020.05.14
    '[PS] 알고리즘문제풀이' 카테고리의 다른 글
    • [백준,PS,BFS][PYTHON] #2178 . 미로탐색
    • [백준,PS,그래프탐색][PYTHON] #1707. 이분그래프
    • [백준,PS,그래프탐색][PYTHON] #2606. 바이러스
    • [백준,PS,재귀,DP,삼성SW][PYTHON] #14501. 퇴사
    자고일어나니코딩왕
    자고일어나니코딩왕
    열코!

    티스토리툴바