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) }
相关文章推荐
- 广度优先搜索解决迷宫问题
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- 九度OJ 教程86 广度优先搜索解决迷宫问题之《胜利大逃亡》
- C++广度优先搜索算法之迷宫问题
- poj 3984 迷宫问题 BFS 图的广度优先搜索
- 广度优先搜索解决八数码问题
- 迷宫问题解决方法:分别基于深度搜索和广度搜索的思想来实现
- 写给妹妹的编程札记 5 - 搜索: 迷宫问题 - 广度优先搜索
- 八数码问题——双向广度优先搜索解决
- 广度优先搜索:迷宫问题
- 广度优先搜索例2--走迷宫问题
- 广度优先搜索--POJ迷宫问题
- 迷宫问题解决方法:分别基于深度搜索和广度搜索的思想来实现
- 用广度优先搜索解迷宫问题
- 广度优先搜索求解迷宫问题
- 广度优先搜索BFS(迷宫问题)
- 终于知道递归解决什么样的问题了,指数级问题(或者说无法简单的用for循环就能完成的问题)。想通了为啥图的优先和广度优先搜索的时间复杂度是o(n+e)了,而且一分不差。
- C/C++广度优先搜索模拟迷宫求解问题
- 机试算法讲解: 第41题 广度优先搜索之迷宫问题