Search
Duplicate

백트래킹

Created
2024/02/15 02:47
Tags
BackTracking
태그

백트래킹

15649 N과 M(1)

import Foundation let input = readLine()!.split(separator: " ").map { Int($0)! } let N = input[0], M = input[1] var visited = [Bool](repeating: false, count: N+1) // 이미 뽑은 수는 제외하기 위해 // visited 배열은 길이가 N+1인 Bool 배열을, 모든 값을 false로 초기화한다. func dfs(nums: [Int]) { if nums.count == M { nums.forEach { print($0, terminator: " ") } print() // nums 길이가 M이 되면, nums의 모든 요소를 출력한다 return // 그 후 return 하여 탐색하지 않고 종료 } for i in 1...N { if !visited[i] { visited[i] = true dfs(nums: nums+[i]) // nums 배열에 i를 추가한 새로운 배열 // 이 재귀호출을 통해, 현재 숫자 i를 포함한 새로운 경로로 탐색을 계속 진행한다 visited[i] = false // 재귀호출이 완료되면(더 이상 숫자를 선택하지 않고 모든 가능한 경로를 탐색한 후) // visited[i]를 false로 설정하여, 숫자 i를 다시 선택하지 않은 상태로 되돌린다. // 이는 다른 경로에서 숫자 i를 선ㅌ개할 수 있도록 하기 위함이다. } } } dfs(nums: [])
Swift
복사