golang广度优先算法-走迷宫

- package main
- import (
- "fmt"
- "os"
- )
- type point struct {
- i, j int
- }
- //获取临近的点
- func (p point) add(r point) point {
- return point{p.i + r.i, p.j + r.j}
- }
- //判断点是否在二维数组中,并返回点的值
- func (p point) at(grid [][]int) (int, bool) {
- if p.i < || p.i >= len(grid) {
- return , false
- }
- if p.j < || p.j >= len(grid[p.i]) {
- return , false
- }
- return grid[p.i][p.j], true
- }
- //点的遍历顺序,上、左、下、右
- var dirs = []point{
- {-, }, {, -}, {, }, {, },
- }
- func walk(maze [][]int, start, end point) [][]int {
- steps := make([][]int, len(maze))
- for i := range steps {
- steps[i] = make([]int, len(maze[i]))
- }
- Q := []point{start}
- for len(Q) > {
- cur := Q[]
- Q = Q[:]
- if cur == end {
- break
- }
- for _, dir := range dirs {
- next := cur.add(dir)
- val, ok := next.at(maze)
- //next点在数组中,且不能为墙 ,next点不能是起点
- if !ok || val != {
- continue
- }
- if next == start {
- continue
- }
- if steps[next.i][next.j] == && next.i <= end.i && next.j <= end.j {
- curSteps, _ := cur.at(steps)
- steps[next.i][next.j] = curSteps +
- Q = append(Q, next)
- }
- }
- }
- return steps
- }
- func readMaze(fileName string) [][]int {
- file, _ := os.Open(fileName)
- defer file.Close()
- var row, col int
- fmt.Fscanf(file, "%d %d", &row, &col)
- maze := make([][]int, row)
- for i := range maze {
- maze[i] = make([]int, col)
- for j := range maze[i] {
- fmt.Fscan(file, &maze[i][j])
- }
- }
- return maze
- }
- func main() {
- maze := readMaze("arr.in")
- steps := walk(maze, point{, }, point{len(maze) - , len(maze[]) - })
- for _, row := range steps {
- for _, val := range row {
- fmt.Printf("%3d ", val)
- }
- fmt.Println()
- }
- }
打印结果:
arr.in文件内容
golang广度优先算法-走迷宫的更多相关文章
- golang 实现广度优先算法(走迷宫)
maze.go package main import ( "fmt" "os" ) /** * 广度优先算法 */ /** * 从文件中读取数据 */ fun ...
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...
- 用Q-learning算法实现自动走迷宫机器人
项目描述: 在该项目中,你将使用强化学习算法,实现一个自动走迷宫机器人. 如上图所示,智能机器人显示在右上角.在我们的迷宫中,有陷阱(红色炸弹)及终点(蓝色的目标点)两种情景.机器人要尽量避开陷阱.尽 ...
- LeetCode 79,这道走迷宫问题为什么不能用宽搜呢?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第48篇文章,我们一起来看看LeetCode当中的第79题,搜索单词(Word Search). 这一题官方给的难 ...
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- 广度优先搜索--POJ迷宫问题
Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...
- SDOI2012 走迷宫
走迷宫 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发 ...
- Prim算法生成迷宫
初始化地图 function initMaze(r,c){ let row = new Array(2 * r + 1) for(let i = 0; i < row.length; i++){ ...
- Java基于OpenCV实现走迷宫(图片+路线展示)
Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...
随机推荐
- 安卓 往SD卡里写文件不能及时更新的问题
我们做Android开发时奖保存图片到SD卡,但是Gallery中不能及时显示 下面我找到了问题所在然后解决了这个问题. 当保存图片后打开gallery时,有的会自动给你刷新,有的不行,这样就导致图片 ...
- sqlite3简单操作
最近在操作公司视频设备的tutk转发服务器的时候,用到的数据库是sqlite,在此复习一下 目录 1 建立数据库档案 2 在sqlite3提示列下操作 3 SQL的指令格式 4 建立资料表 5 建立索 ...
- 【OCP认证12c题库】CUUG 071题库考试原题及答案(26)
26.choose two Examine the structure of the PRODUCTS table. Which two statements are true? A) EXPIRY_ ...
- docker安装配置
########################################## #docker安装配置 #环境centos7 #配置docker阿里源 echo '#Docker [docker ...
- Get 和 Post 方法的选择和URL的设计
原文链接:http://yifei.me/note/540 HTTP 中常用的方法有 GET/POST/PUT/DELETE 等,在设计API或者表单的时候我们需要选择合适的方法.一般有两种方案: 只 ...
- webpack 踩的坑
我是看着这篇博客学习的 http://www.jianshu.com/p/42e11515c10f# 看到loaders的时候,按照博主写法去试 结果报错....找了好久,上网查了好多 也看错误信息了 ...
- [Objective-C语言教程]类和对象(24)
Objective-C编程语言的主要目的是为C编程语言添加面向对象,类是Objective-C的核心特性,支持面向对象编程,通常称为用户定义类型. 类用于指定对象的形式,它将数据表示和方法组合在一起, ...
- Django2.0 URL配置详解
转自:https://www.cnblogs.com/feixuelove1009/p/8399338.html Django2.0发布后,很多人都拥抱变化,加入了2的行列. 但是和1.11相比,2. ...
- 使用selenium的WebDriver和ChromeDriver实现UI自动化
下载chromedriver chromedriver与chrome的对应关系表:http://blog.csdn.net/huilan_same/article/details/51896672 下 ...
- 【kuangbin】计算几何部分最新模板
二维几何部分 // `计算几何模板` ; const double inf = 1e20; const double pi = acos(-1.0); ; //`Compares a double t ...