백준

그래프 BFS DFS

화찌님 2023. 11. 19. 18:30

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

 

1260번: DFS와 BFS

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

www.acmicpc.net

이 문제를 몇번이나 푸는지 모르겠지만

bfs/dfs문제들은 공백기가 생기면 초기화되는 매직 🥲

다시 풀려면 처음부터 공부하다보니 시간을 오래 잡아먹어서 이번기회에 제대로 잡고 가려고 포스팅을 한다.

 

이 포스팅에선 !!그래프와 관련된!! BFS/DFS만 다룬다.

//
//  1260.swift
//  BOJ
//
//  Created by leehwajin on 2023/01/09.
//

import Foundation
//1260 DFS와BFS
var nmv = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = nmv[0]
let m = nmv[1]
let v = nmv[2]

var visited = Array(repeating: false, count: n+1)
var matrix = Array(repeating: Array(repeating: 0, count: n+1), count: n+1)

for _ in 0..<m { //그래프 2차원배열로 표현
    let nums = readLine()!.split(separator: " ").map{ Int(String($0))! }
    matrix[nums[0]][nums[1]] = 1
    matrix[nums[1]][nums[0]] = 1
}

func bfs(_ v: Int){
    var queue = [v]
    while !queue.isEmpty{
        let node = queue.removeFirst()
        print(node,terminator: " ")
        visited[node] = true
        for i in 1...n{
            if visited[i] == false && matrix[node][i] == 1{
                visited[i] = true
                queue.append(i)
            }
        }
    }
}

func dfs(_ start: Int) {
    visited[start] = true
    print(start, terminator: " ")
    for i in 1..<n+1 {
        if visited[i] == false && matrix[start][i] == 1 {
            dfs(i)
        }
    }
}

 

* 여기서 매트릭스 배열은 노드와의 관계를 저장하는 2차원 배열 (정사각형 배열)

'백준' 카테고리의 다른 글

n과m 대표적인 백트래킹문제  (0) 2023.12.30
숨바꼭질 2  (0) 2023.12.24
비밀지도  (1) 2023.11.12
연속되는 문자에 관한 문제 풀이  (0) 2023.11.11
[Swift] 진법 변환 radix  (0) 2023.11.11