首页 > 其他 > 详细

6-递归迷宫问题-Scala实现

时间:2020-06-11 16:00:36      阅读:51      评论:0      收藏:0      [点我收藏+]

0表示未被探测过,1表示墙,2表示经过探测是通路,3经过探测发现是死路。

给出两种策略,下右上左;上右下左

package com.atguigu.datastructures.recursion

object MiGong {
  def main(args: Array[String]): Unit = {
    //1,创建迷宫
    val map = Array.ofDim[Int](8,7)
    //2,给map地图,加墙

    //给最上面和最下面设置1
    for (i <- 0 until 7) {
      map(0)(i) = 1
      map(7)(i) = 1
    }

    //最左和最右设置1
    for (i <- 0 until 8) {
      map(i)(0) = 1
      map(i)(6) = 1
    }
    println("迷宫的情况")
    for (row <- map){
      for (item <- row){
        printf("%d ",item)
      }
      println()
    }
    //墙
    map(3)(1)=1
    map(3)(2)=1
    map(2)(2)=1


    //测试一下是否ok
    setWay2(map,1,1)
    println("小球递归回溯后的情况")
    for (row <- map){
      for (item <- row){
        printf("%d ",item)
      }
      println()
    }


  }
//修改策略
def setWay2(map:Array[Array[Int]],i:Int,j:Int):Boolean={
  if (map(6)(5)==2){//表示通路已经找到
    return true
  }else{
    //说明map(i)(j)取值0,1,2,3
    if (map(i)(j)==0){//说明该点还没有被探测过
      //用自己的策略
      //先将map(i)(j),假定该点可以走通,但不一定
      map(i)(j)=2
      //向上
      if (setWay2(map,i-1,j)){
        return true
      }else if(setWay2(map,i,j+1)){//向右
        return true
      }else if (setWay2(map,i+1,j)){ //下
        return true
      }else if (setWay2(map,i,j-1)){
        //左
        return true
      }else{
        //说明该点四个方向都无法到达终点
        map(i)(j)=3
        return false
      }

    }else{//1,2,3

      return false
    }



  }
}

  //编写一个方法完成找路
  /**
    * 功能完成递归回溯找路
    * @param map 地图
    * @param i  表示现在正在探测哪个位置的横坐标
    * @param j  表示现在正在探测哪个位置的纵坐标
    */
  def setWay(map:Array[Array[Int]],i:Int,j:Int):Boolean={
    if (map(6)(5)==2){//表示通路已经找到
      return true
    }else{
      //说明map(i)(j)取值0,1,2,3
      if (map(i)(j)==0){//说明该点还没有被探测过
        //用自己的策略
        //先将map(i)(j),假定该点可以走通,但不一定
        map(i)(j)=2
        //向下
        if (setWay(map,i+1,j)){
          return true
        }else if(setWay(map,i,j+1)){//向右
          return true
        }else if (setWay(map,i-1,j)){
          return true
        }else if (setWay(map,i,j-1)){
          //左
          return true
        }else{
          //说明该点四个方向都无法到达终点
          map(i)(j)=3
          return false
        }

      }else{//1,2,3

        return false
         }



    }
  }

}

  

 

6-递归迷宫问题-Scala实现

原文:https://www.cnblogs.com/help-silence/p/13024086.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!