您的位置:首页 > 其它

scala 广度优先搜索解决迷宫问题

2016-09-14 18:46 435 查看
//广度优先搜索:一般是搜索一路最短路径,并不搜索出所有路径,也不搜索出所有最短的路径
object MiGong3 extends App{
import scala.collection.mutable.ArrayBuffer
val migong = Array(
Array(1,1,1,1,1,1,1,1,1,1),
Array(1,0,0,1,1,0,0,1,0,1),
Array(1,0,0,1,0,0,0,1,0,1),
Array(1,0,0,0,0,1,1,0,0,1),
Array(1,0,0,1,1,0,0,0,0,1), //Array(1,0,1,1,1,0,0,0,0,1),
Array(1,0,0,0,1,0,0,0,0,1),
Array(1,0,1,0,0,0,1,0,0,1),
Array(1,0,1,1,1,0,1,1,0,1),
Array(1,1,0,0,0,0,0,0,0,1),
Array(1,1,1,1,1,1,1,1,1,1))
val direction = Map(0->(0,-1),1->(-1,0),2->(0,1),3->(1,0)) //左、上、右、下
val father = ArrayBuffer[(Int,Int)]()
val path = ArrayBuffer[(Int,Int)]((1,1))
var isfind = false
migong(1)(1) = 1
var index = 0
while(index < path.size && !isfind){
for(i <- 0.until(4) if !isfind){
val x = path(index)._1+direction(i)._1
val y = path(index)._2+direction(i)._2
if(migong(x)(y) == 0){
path += ((x,y))
migong(x)(y) = 1
father += ((path(index)._1,path(index)._2))
}
if(x == 8 && y == 2){
isfind = true
}
}
index += 1
}
val temp = path.drop(1).zip(father).toMap
val result = ArrayBuffer[(Int,Int)]()
def printpath(x:(Int,Int)){
// println(x)
result += x
if(x == (1,1)){
return
}
printpath(temp(x))
}
path.filter(_ == (8,2)).map(printpath)
println(result.size)
println(result.reverse.mkString)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 scala