Hikenny25

1260 - DFS와 BFS 본문

baekjoon (solved.ac)/class 3 Solve

1260 - DFS와 BFS

hikenny 2022. 10. 25. 21:54

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

- DFS

- BFS

 

import sys
input = sys.stdin.readline

from collections import deque

class Graph:
    def __init__(self, size):
        self.size = size
        self.matrix = [[0] * size for _ in range(size)]
        self.visited = [0] * size

    def addEdge(self, v1, v2):
        self.matrix[v1][v2] = self.matrix[v2][v1] = 1

    def dfs(self, start):
        self.visited[start] = 1
        print(start+1, end=" ")
        for i in range(self.size):
            if self.matrix[start][i] == 1 and self.visited[i] == 0:
                self.dfs(i)

    def bfs(self, start):
        q = deque([start])
        self.visited[start] = 1

        while q:
            k = q.pop()
            print(k+1, end=" ")
            for i in range(self.size):
                if self.matrix[k][i] == 1 and self.visited[i] == 0:
                    q.appendleft(i)
                    self.visited[i] = 1
    
    def resetVisited(self):
        self.visited = [0] * self.size

n, m, v = map(int, input().split())

g = Graph(n)
for _ in range(m):
    n1, n2 = map(int, input().split())
    g.addEdge(n1-1, n2-1)

g.dfs(v-1)
print()
g.resetVisited()
g.bfs(v-1)

기본 그래프 탐색 구현 문제이다

 

(삘받아서 그래프 문제 하나 더 함ㅎㅎ)

 

 

dfs는 스택보다 재귀로 구현하는 것이 훨씬 간단하다는 것을 알앗다

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

11727 - 2×n 타일링 2  (0) 2022.10.25
11726 - 2×n 타일링  (0) 2022.10.25
2606 - 바이러스  (0) 2022.10.25
2579 - 계단 오르기  (0) 2022.10.25
1463 - 1로 만들기  (0) 2022.10.25
Comments