[파이썬] 백준 11403 : 경로 찾기 (실버1)
문제
풀이
0.방향성 생각
방향성 있는 그래프. 입력을 받아서 각 노드에서 몇 번 노드로 갈 수 있는지 arr에 추가해준다.
인접행렬로 표현하라 했으므로 2차원 배열 visit을 만들어주고 BFS로 체크
1. 입력받기, 경로 추가
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
arr = [[] for i in range(n)]
for i in range(n):
temp = list(map(int,input().split()))
for j in range(n):
if temp[j] == 1:
arr[i].append(j)
2. BFS 탐색
visit = [[0]*n for i in range(n)]
for i in range(n):
q = deque()
for j in arr[i]:
q.append(j)
while q :
x = q.popleft()
visit[i][x] = 1
for k in arr[x] :
if not visit[i][k] :
q.append(k)
print(*visit[i])
각 노드 번호에서 시작해서 BFS를 실행.
출발점에서는 방문 체크를 하지 않는다. 시작점에서 시작해서 다시 올 수 있는지 모른다.
방문하지 않은 곳을 갔을 경우에는 큐에 추가
전체코드
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
arr = [[] for i in range(n)]
for i in range(n):
temp = list(map(int,input().split()))
for j in range(n):
if temp[j] == 1:
arr[i].append(j)
visit = [[0]*n for i in range(n)]
for i in range(n):
q = deque()
for j in arr[i]:
q.append(j)
while q :
x = q.popleft()
visit[i][x] = 1
for k in arr[x] :
if not visit[i][k] :
q.append(k)
print(*visit[i])
코멘트
시간제한이 빡센 문제는 아니라서 간단한 BFS 형태로 풀었다.
중복 탐색을 줄이기 위한 리스트가 있으면 더 효율적으로 풀었을듯.
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 1647 : 도시 분할 계획 (골드4) (0) | 2023.06.30 |
---|---|
[파이썬] 백준 1260 : DFS와 BFS (실버2) (0) | 2023.06.03 |
[파이썬] 백준 16928 : 뱀과 사다리 게임 (골드5) (0) | 2023.06.03 |
[파이썬] 백준 4179, 5427 : 불!, 불 (골드4) (0) | 2023.05.29 |
[파이썬] 백준 3055 : 탈출 (골드4) (0) | 2023.05.25 |
[파이썬] 백준 5014 : 스타트링크 (실버1) (0) | 2023.05.24 |
[파이썬] 백준 12851, 13913 : 숨바꼭질 2, 숨바꼭질 4 (골드4) (0) | 2023.05.23 |
댓글