package main

 import (
"fmt"
"os"
) /*
*将文档结构读入到切片中(二维数组)
*row, col 行数 列数 (文档第一行数据)
*fmt.Fscanf 逐一字符读取 (遇到换行返回值为0)***Fscan(遇到换行视为空白)***
*
*/
func readMaze(filename string) [][]int {
file, err := os.Open(filename)
if err != nil {
panic(err)
} 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.Fscanf(file, "%d", &maze[i][j])
}
} return maze
} //定义点位
type point struct {
i, j int
} //运算的坐标点左、下、右、上
var dirs = [4]point{{-1, 0}, {0, -1}, {1, 0}, {0, 1}} //运算
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 < 0 || p.i >= len(grid) {
return 0, false
} if p.j < 0 || p.j >= len(grid[p.i]) {
return 0, false
} return grid[p.i][p.j], true
} /**
*行走实现路线
*1、新建切片数组 记录总行和列数 填充步数
*
*
*
**/
func walk(maze [][]int, start, end point) [][]int {
steps := make([][]int, len(maze)) // slice
for i := range steps {
steps[i] = make([]int, len(maze[i]))
} Q := []point{start} for len(Q) > 0 {
cur := Q[0] //队列 多数组 依次
Q = Q[1:] if cur == end {
break
}
//排除走过的不能走的
for _, dir := range dirs {
next := cur.add(dir) val, ok := next.at(maze)
if !ok || val == 1 {
continue
} val, ok = next.at(steps)
if !ok || val != 0 {
continue
} if next == start {
continue
} curSteps, _ := cur.at(steps)
steps[next.i][next.j] = curSteps + 1 Q = append(Q, next)
}
} return steps
} func main() { maze := readMaze("maze.in") steps := walk(maze, point{0, 0}, point{len(maze) - 1, len(maze[0]) - 1}) for _, row := range steps {
for _, val := range row {
fmt.Printf("%3d", val)
}
fmt.Println()
} // TODO: construct path from steps
}

maze.in

6 5
0 1 0 0 0
0 0 0 1 0
0 1 0 1 0
1 1 1 0 0
0 1 0 0 1
0 1 0 0 0

go 广度搜索案例(迷宫)的更多相关文章

  1. 记录----第一次使用BFS(广度搜索)学习经验总结

    学习经验记录与分享—— 最近在学习中接触到了一种解决最短路径的实用方法----BFS(广度搜索),在这里总结并分享一下第一次学习的经验. 首先第一个要了解的是"queue"(队列函 ...

  2. 八数码问题:C++广度搜索实现

    毕竟新手上路23333,有谬误还请指正. 课程设计遇到八数码问题(这也是一坨),也查过一些资料并不喜欢用类函数写感觉这样规模小些的问题没有必要,一开始用深度搜索却发现深搜会陷入无底洞,如果设定了深度限 ...

  3. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  4. JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

    1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再 ...

  5. Leetcode 课程表 C++ 图的深度搜索和广度搜索练习

    广度搜索(degree) struct GraphNode{ int label; vector<GraphNode*> neighbours; GraphNode(int x):labe ...

  6. 广度优先搜索--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, ...

  7. 深入浅出面向对象分析与设计读书笔记一&吉他搜索案例&吉他特性锚点集中&委托&重用&业务阶段&需求列表&用例

    案例:吉他搜索Guitar Inventory GuitarSpec需求变化:增加吉他弦数特性原始程序需要的变化: 1.修改GuitarSpec,构造,成员,getter 2.修改Guitar,构造, ...

  8. yii2 GridView 日期格式化并实现日期可搜索 案例

    作者:白狼 出处:http://www.manks.top/article/yii2_gridview_dateformat_search 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且 ...

  9. poj3984 广度搜索BFS

      迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 ...

随机推荐

  1. 3dmax2019卸载/安装失败/如何彻底卸载清除干净3dmax2019注册表和文件的方法

    3dmax2019提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2019失败提示3dmax2019安装未完成,某些产品无法安装,也有时候想重新安装3 ...

  2. MySQL之数据存储引擎

    1.什么是存储引擎: 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处 理文本用txt类型,处理表格用excel,处理图片用png等,数据库中的表也应该有不同的 ...

  3. OpenCV Mat - 基本图像容器

    Mat 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材 ...

  4. crack|erosion|strip|

    V-ERG (使)破裂;(使)裂开;(使)断裂 If something hard cracks, or if you crack it, it becomes slightly damaged, w ...

  5. python2下经典爬虫(第一卷)

    python2.7的爬虫个人认为比较经典在此我将会用书中的网站http://example.webscraping.com作为案例 爬虫第一步:进行背景调研 了解网站的结构资源在网站的robots.t ...

  6. mongoDB连接信息及生成对应的collection生成代码

    .net,个人封装MONGODDB的操作. using System; using System.Collections.Generic; using System.Linq; using Syste ...

  7. 图的DFS。。类似树的DFS

    Depth-First Search (DFS) Depth-first search (DFS) is an algorithm for traversing or searching tree o ...

  8. hibernate lazy属性参数说明

    lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效:session关闭后lazy就没效了. lazy策略可以用在: * <class>标签上:可以取值true/fa ...

  9. Leetcode刷题记录 旋转矩阵

    https://leetcode-cn.com/problems/spiral-matrix/submissions/ class Solution(object): def spiralOrder( ...

  10. jQuery2.0.0版本以后不再支持ie8的原因

    在引用jQuery时,引用高版本的Jq会在IE8下报错,在网上查了一下,jq在2.0+的版本就已经放弃对ie8的支持了.之前没有仔细研究过jq版本,借此机会去看了一下jq版本的知识.一.如何查看jq的 ...