美文网首页程序员
菜鸟算法-深度优先搜索-寻宝

菜鸟算法-深度优先搜索-寻宝

作者: 甚了 | 来源:发表于2016-11-20 18:23 被阅读58次

    深度搜索

    • 问题描述:
    • |[x1]|[x2]|[x3]|[x4]
      ------|-----|-----|-----|-----
      [y1]| 0 | 0 | 1 | 0
      [y2]| 0 | 0 | 0 | 0
      [y3]| 0 | 0 | 1 | 0
      [y4]| 0 | 1 |A| 0
      [y5]| 0 | 0 | 0 | 1

    上面的表格是一张藏宝图的抽象,坐标中0表示空地,1表示有障碍物, A表示藏宝点,现在我们从坐标(1, 1)出发开始寻宝之旅。


    这个问题其实和N数全排还是一样,我们依然用深度优先搜索的思路来想这个问题:这里有M*N个位置,每个位置最多可以选择4个方向可以走(向右、向下、向左、向上)。每当我们到达一个位置就可以用同样的方法来处理我们下一步的动作。

    var treasureMap = [5][4]int{
            {0, 0, 1, 0},
            {0, 0, 0, 0},
            {0, 0, 1, 0},
            {0, 1, 0, 0},
            {0, 0, 0, 1},
    }
    var locationMarks [5][4]int
    
    var dereoctions = [4][2]int{
            {1, 0},  // 向右
            {0, 1},  // 向下
            {-1, 0}, // 向左
            {0, -1}, // 向上
    }
    
    var minDistance int = 20
    var targetX, targetY int = 2, 3
    
    func DeepFirstSearch3(x, y, step int) {
            locationMarks[y][x] = 1
    
            if targetX == x && targetY == y {
                    if step < minDistance {
                            minDistance = step
                            fmt.Println("Now distance is ", minDistance)
                            for i := 0; i < 5; i++ {
                                    fmt.Println(locationMarks[i])
                            }
                    }
                    return
            }
    
            for d := 0; d < 4; d++ { // 遍历下一步的方向
                    // 计算下一个坐标
                    tx := x + dereoctions[d][0]
                    ty := y + dereoctions[d][1]
    
                    // 查看是否越界
                    if tx < 0 || tx > 3 || ty < 0 || ty > 4 {
                            continue
                    }
    
                    // 查看下一个点是否是障碍物 或者 已经经过
                    if treasureMap[ty][tx] == 0 && locationMarks[ty][tx] == 0 {
                            //locationMarks[ty][tx] = 1
                            DeepFirstSearch3(tx, ty, step+1)
                            locationMarks[ty][tx] = 0
                    }
            }
            return
    }
    
    
    结果

    相关文章

      网友评论

        本文标题:菜鸟算法-深度优先搜索-寻宝

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