[1261] 알고스팟

toru·2022년 9월 22일
0
// 다익스트라
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let (m,n) = (p[0],p[1])
let d = [(-1,0),(1,0),(0,-1),(0,1)]
var arr = [[Int]]()
var dist = Array(repeating: Array(repeating: Int.max, count: m), count: n)

for _ in 0..<n {
    arr.append(readLine()!.map{Int(String($0))!})
}

func bfs() {
    var q = [(0,0)]
    var index = 0
    dist[0][0] = 0
    
    while index < q.count {
        let node = q[index]
        index += 1
        
        for (x,y) in d {
            let nx = node.0+x
            let ny = node.1+y
            if 0<=nx, 0<=ny, nx<n, ny<m {
                switch arr[nx][ny] {
                case 0 :
                    if dist[nx][ny] > dist[node.0][node.1] {
                        dist[nx][ny] = dist[node.0][node.1]
                        q.append((nx,ny))
                    }
                default: // 1
                    if dist[nx][ny] > dist[node.0][node.1] + 1 {
                        dist[nx][ny] = dist[node.0][node.1] + 1
                        q.append((nx,ny))
                    }
                }
            }
        }
    }
    print(dist[n-1][m-1])
}
bfs()
profile
iOS

0개의 댓글