DFS는 깊이 우선 탐색을로 재귀함수를 구현해야하고

BFS는 큐를 구현하여 해결해야 합니다.

import Foundation

// 입력을 받아서 배열을 초기화합니다.
let line = readLine()!.split(separator: " ").map { Int($0)! }
var arr: [[Int]] = Array(repeating: [], count: line[0] + 1)

// 간선 정보를 입력받아 배열에 저장합니다.
for _ in 1...line[1] {
    let values = readLine()!.split(separator: " ").map { Int($0)! }
    arr[values[0]].append(values[1])
    arr[values[1]].append(values[0])
}

for i in 1...line[0] {
    arr[i].sort()
}

// 방문한 노드를 추적하기 위한 배열을 생성합니다.
var visited = Array(repeating: false, count: line[0] + 1)

func dfs(n: Int) {
    // 현재 노드를 방문 처리합니다.
    visited[n] = true
    print(n, terminator: " ") // 현재 방문한 노드를 출력합니다.
    
    // 인접한 모든 노드를 탐색합니다.
    for i in arr[n] {
        if !visited[i] {
            dfs(n: i) // 방문하지 않은 노드에 대해 재귀적으로 DFS를 수행합니다.
        }
    }
}

// 시작 노드부터 DFS를 시작합니다.
dfs(n: line[2])
print()

var visited2 = Array(repeating: false, count: line[0] + 1)

func bfs(n: Int) {
    // 큐를 사용 (FILO) 처음으로 들어온 것이 마지막으로 나갑니다
    var queue: [Int] = [n]
    visited2[n] = true
    
    while !queue.isEmpty {
        let node = queue.removeFirst()
        print(node, terminator: " ")
        
        for i in arr[node] {
            if !visited2[i] {
                visited2[i] = true
                queue.append(i)
            }
        }
    }
}

bfs(n: line[2])
ytw_developer