[백준/DFS-BFS] 11403: 경로 찾기 - 파이썬

2022. 5. 17. 22:51· Problem Solving/CT-Python
목차
  1. 문제
  2. 풀이

문제

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

 

11403번: 경로 찾기

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

www.acmicpc.net

 

풀이

3가지 풀이 방법으로 풀었다. BFS 풀이방법이 실행시간이 제일 짧았으며 그 다음은 DFS, 마지막으로 플로이드-와샬 알고리즘을 사용한 방법이 제일 느렸다.

 

먼저 BFS로 푼 방법이다. 

각 정점마다 방문했는지 visited에 저장하고 간선으로 해당 정점이 연결되어 있다면 check에 1을 기록하였다. 

이때 visited는 각 정점을 방문하면서 방문했는지 기록해야 한다. 

# 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()
    queue.append(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(0, n):
    bfs(i)

for i in visited:
    print(*i)

 

그 다음은 DFS로 푼 방법이다. 

# 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)

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

 

다음은 플로이드-워셜 알고리즘으로 구한 방법이다. 

# 플로이드-와샬 알고리즘을 이용한 풀이
n = int(input())
graph = [list(map(int, input().split())) for _ in range(n)]

for i in range(n):
    for j in range(n):
        for k in range(n):
            if graph[j][i] and graph[i][k]:
                graph[j][k] = 1
                
for g in graph:
    print(*g)

 

'Problem Solving > CT-Python' 카테고리의 다른 글

[백준/구현] 13904: 과제 - 파이썬  (0) 2022.05.18
[백준/DFS-BFS] 7576: 토마토 - 파이썬  (0) 2022.05.18
[백준/DFS-BFS] 2468: 안전 영역 - 파이썬  (0) 2022.05.17
[백준/자료구조] 6198: 옥상 정원 꾸미기 - 파이썬  (0) 2022.05.16
[백준/자료구조] 1966: 프린터 큐 - 파이썬  (0) 2022.05.16
  1. 문제
  2. 풀이
'Problem Solving/CT-Python' 카테고리의 다른 글
  • [백준/구현] 13904: 과제 - 파이썬
  • [백준/DFS-BFS] 7576: 토마토 - 파이썬
  • [백준/DFS-BFS] 2468: 안전 영역 - 파이썬
  • [백준/자료구조] 6198: 옥상 정원 꾸미기 - 파이썬
White Han
White Han
Software Developer
sudo apt-get happinessSoftware Developer
White Han
sudo apt-get happiness
White Han
전체
오늘
어제
  • 분류 전체보기 (183)
    • Language (35)
      • Java (17)
      • Java-Weekly-study (0)
      • Python (18)
    • BackEnd (11)
      • Server (2)
      • Spring (3)
      • Spring Security (0)
      • JDBC (1)
      • NodeJS (2)
      • LINUX (3)
    • DataBase (10)
      • MySQL (5)
      • MongoDB (4)
      • Oracle (1)
    • Infra (4)
      • Docker (4)
    • CS (38)
      • OS (38)
    • Problem Solving (79)
      • Algorithm (8)
      • CT-Java (30)
      • CT-Python (41)
    • IDE (1)
      • eclipse (1)
      • vscode (0)
    • Etc. (3)
      • Git (1)
      • TDD, Refactor, CleanCode (1)
      • Conference (1)
    • 기록 (2)
      • 후기 (1)
      • 프로젝트 회고록 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

  • 방문해 주셔서 감사합니다.

인기 글

태그

  • 운영체제
  • 24인치 모니터 추천
  • 프로세서
  • 사무용 모니터
  • 자바스크립트
  • 자바스크립트 식별자
  • 자바 super
  • 프로세스
  • 싸피 합격
  • 알파스캔 모니터
  • 알파스캔 AOC 24B1X
  • 싸피8기
  • 사무용 모니터 추천
  • 운영체제 구조
  • 싸피
  • 운영체제 역할
  • Java super
  • javascript identifier
  • Java Inheritance
  • 자바스크립스 식별자 종류
  • javascript
  • Java this
  • 자바 inheritance
  • SSAFY
  • java
  • OS
  • 자바 this
  • 싸피 후기
  • AOC 24B1X
  • 자바스크립트 개념

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
White Han
[백준/DFS-BFS] 11403: 경로 찾기 - 파이썬
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.