[백준 BFS] 맥주 마시면서 걸어가기(python)

이진규·2022년 12월 29일
0

백준(PYTHON)

목록 보기
113/115

문제

https://www.acmicpc.net/problem/9205

나의 코드

"""

from collections import deque

T = int(input())

def cmp(x, y): # 거리가 1000이하인(맥주 20캔 풀 충전) 그래프 끼리 연결

    if abs(xy[x][0] - xy[y][0]) + (abs(xy[x][1] - xy[y][1]) ) <= 1000:
        graph[x+1].append(y+1)
        graph[y+1].append(x+1)

def bfs(st, en): # 출발지에서 도착지로 도착하면 answer에 "happy" 출력
    global answer
    visited[st] = True
    q = deque([st])

    while q:
        node = q.popleft()

        if node == en:
            answer = "happy"
            break

        for i in graph[node]:
            if not visited[i]:
                visited[i] = True
                q.append(i)

for _ in range(T):

    N = int(input())
    graph = [ [] for _ in range(N+3) ]

    xy = []
    for _ in range(N+2):
        a, b = map(int, input().split())
        xy.append((a, b))

    for i in range(N+2):
        for j in range(N+2):
            if i != j:
                cmp(i, j)

    visited = [False] * (N+3)
    answer = "sad"
    bfs(1, N+2)
    print(answer)
    

배운점

거리가 1000이하인 그래프 끼리 연결해서 BFS로 탐색 후 출발지에서 도착지에 도착할 수 있으면 "happy" 그렇지 않으면 "sad" 출력

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글