๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Class3] 11403๋ฒˆ_๊ฒฝ๋กœ ์ฐพ๊ธฐ

Dbswnstjd 2022. 11. 15. 00:15

๋ฌธ์ œ

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

 

11403๋ฒˆ: ๊ฒฝ๋กœ ์ฐพ๊ธฐ

๊ฐ€์ค‘์น˜ ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ G๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ์ •์  (i, j)์— ๋Œ€ํ•ด์„œ, i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

ํ’€์ด

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ํ‘ธ๋Š”๋ฐ ์กฐ๊ธˆ ์ƒ๊ฐ๋„ ๋งŽ์ด ํ•ด๋ณด๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. 

๋˜ํ•œ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒ˜์Œ ์ ‘ํ•ด๋ด์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆฐ ๋ถ€๋ถ„๋„ ์žˆ์—ˆ๋‹ค. 

DFS ๋‚˜ BFS๋กœ๋„ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค. 

 

DFS๋ฅผ ์ด์šฉํ•œ ํ’€์ด

# ๋ฐฑ์ค€ 11403๋ฒˆ ๋ฌธ์ œ - ๊ฒฝ๋กœ ์ฐพ๊ธฐ
# DFS
n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
visited = [0 for _ in range(n)]

def dfs(x):
    for i in range(n):
        if graph[x][i] == 1 and visited[i] == 0:
            visited[i] = 1
            dfs(i)
    return visited
for i in range(n):
    visited = [0 for _ in range(n)]
    dfs(i)
    for j in range(n):
        if visited[j] == 1:
            print(1, end=' ')
        else:
            print(0, end=' ')
    print()

 

BFS๋ฅผ ์ด์šฉํ•œ ํ’€์ด

# BFS
from collections import deque

n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]
visited = [[0]*n for _ in range(n)]

def bfs(x):
    queue = deque([x])
    check = [0 for _ in range(n)]

    while queue:
        q = queue.popleft()

        for i in range(n):
            if check[i] == 0 and graph[q][i] == 1:
                queue.append(i)
                check[i] = 1
                visited[x][i] = 1

for i in range(n):
    bfs(i)
for i in visited:
    print(*i)

 

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ํ’€์ด

# ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
import sys
input = sys.stdin.readline

N = int(input().rstrip())
matrix = [list(map(int, input().rstrip().split())) for _ in range(N)]

for k in range(0, N):         # ๊ฒฝ์œ ์ง€ ๋…ธ๋“œ
    for i in range(0, N):     # ์ถœ๋ฐœ ๋…ธ๋“œ
        for j in range(0, N): # ๋„์ฐฉ ๋…ธ๋“œ
            if matrix[i][k]==1 and matrix[k][j]==1:
                matrix[i][j] = 1


for m in matrix:
    print(*m)