Hikenny25

11403 - 경로 찾기 본문

baekjoon (solved.ac)/class 3 Solve

11403 - 경로 찾기

hikenny 2022. 10. 27. 17:59

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

 

11403번: 경로 찾기

가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

- 그래프 탐색

 

import sys
input = sys.stdin.readline

def search(x):
    if path_v:
        visited[x] = True
    path_v.append(x)
    for i in range(n):
        if visited[i] == False and matrix[x][i] == 1:
            search(i)


n = int(input())

matrix = list()
for _ in range(n):
    matrix.append(list(map(int, input().split())))

path = list()
for v in range(n):
    path_v = list()
    visited = [False] * n

    search(v)
    path_v.remove(v)
    path.append(path_v)

for i in path:
    ans = [0] * n
    for j in i:
        ans[j] += 1
    
    for k in range(n):
        if ans[k] == 1:
            print(1, end=' ')
        else:
            print(0, end=' ')
    print()

 

DFS로 재귀를 사용해서 구현했다! 근데 노트처럼 visited 리스트 값을 바로 True로 바꿔버리면 Cycle을 형성하는지 알 수 없어서 path_v 안에 값이 있어야만 (즉, 처음 search가 시작한 것이 아닐 때만) visited를 참으로 바꿔줬다

 

BFS보단 DFS가 구현하기도 편하고 알아보기도 쉬워서 자주 사용하는 것 같다 ㅎ... 나중에 BFS로도 탐색 문제를 풀어봐야게따 (안할 가능성 다분)

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

11724 - 연결 요소의 개수  (0) 2022.10.29
2667 - 단지번호붙이기  (0) 2022.10.28
11286 - 절댓값 힙  (0) 2022.10.27
11279 - 최대 힙  (0) 2022.10.27
1927 - 최소 힙  (0) 2022.10.27
Comments