BOJ 1976 여행 가자
접근 방법
다른 도시로 가는 것을 반복하더라도 여행 계획대로 갈 수 있는지만 판단하면 되기 때문에 여행 계획의 첫 도시에서 다른 도시들로 갈 수 있는지만 판단할 수 있다면 풀 수 있을거라고 생각하였다.
bfs를 진행하면서 방문한 도시들 avail_cities은 시작점에서 갈 수 있는 도시들을 의미하기 때문에 이 도시들을 저장하고 여행 계획의 도시들 중에서 하나라도 avail_cities에 없다면 가능하지 않은 여행 계획이라고 판단하였다.
정답 코드
import sys
from collections import deque
input = sys.stdin.readline
"""
bfs를 하면 한 점에서 다른 점으로 갈 수 있다면 양수로, 가능하지 않다면 0으로 나올 것이다.
bfs의 시작점은 여행 계획의 첫 도시로 한다.
"""
n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
for i in range(1,n+1):
connects = list(map(int, input().split()))
for j in range(len(connects)):
if connects[j]==1:
graph[i].append(j+1)
graph[j+1].append(i)
travel = list(map(int, input().split()))
def bfs(start):
visited = set()
q = deque()
q.append(start)
visited.add(start)
while q:
tmp = q.popleft()
for b in graph[tmp]:
if b not in visited:
q.append(b)
visited.add(b)
return visited
avail_cities = bfs(travel[0])
avail = True
for i in range(1,len(travel)):
if travel[i] not in avail_cities:
avail = False
if avail:
print("YES")
else:
print("NO")