美文网首页Aha! Algorithms
Aha! Algorithms - Bomberman

Aha! Algorithms - Bomberman

作者: su3 | 来源:发表于2017-03-17 14:00 被阅读0次

    《啊哈!算法》第 3 章第 2 节,bomb 人的 Swift 实现。

    问题

    在哪里放置 bomb 才可以消灭最多敌人?

    解决

    沿着上下左右四个方向分别统计敌人数量直到遇到墙。

    // # = 墙;G = 敌人;. = 空地
    let map = [["#","#","#","#","#","#","#","#","#","#","#","#","#"],
               ["#","G","G",".","G","G","G","#","G","G","G",".","#"],
               ["#","#","#",".","#","G","#","G","#","G","#","G","#"],
               ["#",".",".",".",".",".",".",".","#",".",".","G","#"],
               ["#","G","#",".","#","#","#",".","#","G","#","G","#"],
               ["#","G","G",".","G","G","G",".","#",".","G","G","#"],
               ["#","G","#",".","#","G","#",".","#",".","#","#","#"],
               ["#","#","G",".",".",".","G",".",".",".",".",".","#"],
               ["#","G","#",".","#","G","#","#","#",".","#","G","#"],
               ["#",".",".",".","G","#","G","G","G",".","G","G","#"],
               ["#","G","#",".","#","G","#","G","#",".","#","G","#"],
               ["#","G","G",".","G","G","G","#","G",".","G","G","#"],
               ["#","#","#","#","#","#","#","#","#","#","#","#","#"]]
    
    
    let n = map.count //列
    let m = map[0].count //行
    var sum = 0
    var max = 0
    var x: Int
    var y: Int
    var p: Int = 0
    var q: Int = 0
    
    //两重循环枚举地图中的每个点
    for i in 0..<n {
        for j in 0..<m {
            
            //是平地才可以放置 bomb
            if map[i][j] == "." {
                sum = 0
                
                //向上统计可以消灭的敌人数
                x = i; y = j
                while map[x][y] != "#" {
                    if map[x][y] == "G" {
                        sum += 1
                    }
                    x -= 1
                }
                
                //向下统计可以消灭的敌人数
                x = i; y = j
                while map[x][y] != "#" {
                    if map[x][y] == "G" {
                        sum += 1
                    }
                    x += 1
                }
                
                //向左统计可以消灭的敌人数
                x = i; y = j
                while map[x][y] != "#" {
                    if map[x][y] == "G" {
                        sum += 1
                    }
                    y -= 1
                }
                
                //向右统计可以消灭的敌人数
                x = i; y = j
                while map[x][y] != "#" {
                    if map[x][y] == "G" {
                        sum += 1
                    }
                    y += 1
                }
                
                //更新最大值
                if sum > max {
                    max = sum
                    p = i; q = j
                }
            }
        }
    }
    
    print("将 bomb 放置在(\(p),\(q)), 最多可以消灭\(sum)个敌人")
    

    代码在 GitHub

    相关文章

      网友评论

        本文标题:Aha! Algorithms - Bomberman

        本文链接:https://www.haomeiwen.com/subject/xjeenttx.html