迷宫最短路径
时间:2019-09-04
本文章向大家介绍迷宫最短路径,主要包括迷宫最短路径使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/* 现在有这样的一个迷宫,S表示起始位置,E表示结束位置,在迷宫中有一些障碍‘#’, 不能走障碍位置。那么问最少需要多少步可以从起始位置走到重点位置 */ #include <iostream> #include <stdio.h> #define N 100 /******************* N用于确定地图矩阵的最大行或列 *******************/ using namespace std; struct queue { char c; int x, y, dis; }; /******************* 定义一个结构类型,x,y指示坐标位置,dis指示节点到起始点的距离 c用于存储迷宫字符 *******************/ int main() { struct queue que[N*N]; char maze[N][N] = { 0 }; int r, c, sx, sy; //r指示迷宫矩阵的行数,c指示迷宫矩阵的列数,sx,sy用于存储起始点的坐标 cin >> r >> c; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cin >> maze[i][j]; //先从屏幕上读取迷宫矩阵 if (maze[i][j] == 'S') //起始点 { sy = i; sx = j; } } } int vis[N][N] = { 0 }; //用于记录是否搜索过某一节点,为0表示没被搜索过,为1表示已搜索过 int dx[] = { 1, 0, 0, -1 }; int dy[] = { 0, 1, -1, 0 }; /****************** dx[],dy[]数组比较关键,通过这两个数组可以实现对中心点四周的节点的搜索 ******************/ int front = -1, rear = -1; que[++rear].c = maze[sy][sx]; que[rear].x = sx; que[rear].y = sy; que[rear].dis = 0; vis[sx][sy] = 1; /********************** 这一块实现上述的步骤1 **********************/ while (front < rear) { ++front; if (que[front].c == 'E') { cout << que[front].dis << endl; system("pause"); return 0; } else { for (int i = 0; i < 4; i++) { int tx = que[front].x + dx[i]; int ty = que[front].y + dy[i]; if (tx >= 0 && tx < c && ty >= 0 && ty < r && !vis[ty][tx] && maze[ty][tx] != '#') /********************** 此处保证了搜索节点一定位于迷宫矩阵内同时目标节点不是碍, 且目标节点未被搜索过 **********************/ { que[++rear].c = maze[ty][tx]; que[rear].x = tx; que[rear].y = ty; que[rear].dis = que[front].dis + 1; vis[ty][tx] = 1; } } } } cout << -1<<endl; system("pause"); return 0; }
原文地址:https://www.cnblogs.com/277223178dudu/p/11459204.html
- Extjs mvc
- Extjs 数据代理
- WordPress 网站开发“微信小程序”实战(四)
- 详解零知识证明的四大基础技术,如何与以太坊发生反应
- 入门:添加一个支持获取单一资源以及支持POST,PUT和DELETE方法
- html5语义化标签——回顾
- flex布局——回顾
- WordPress 网站开发“微信小程序”实战(五)
- Windows Runtime(WinRT) 揭秘
- WeApp-Workflow: 基于Gulp 的微信小程序前端开发工作流
- 如何安装Windows Phone SDK 7.1 Release Candidate (RC)
- 微信与支付宝回应央行新规:认同央行规范!
- Gulp 工作流中Sass 增量编译功能的探索
- Sass与Compass——回顾
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mockito和PowerMock用法
- 浏览器
- java安全编码指南之:输入校验
- Joomla漏洞总结
- 如何在YouTube Api限额的情况下获取更多视频
- RNA-Seq数据用aspera高效批量下载(万事开头难)
- 并发编程之Atomic&Unsafe魔法类详解
- 重温Retrofit源码,笑看协程实现
- 【java设计模式系列】3. 抽象工厂模式(Abstract Factory)
- 解决jar包冲突的简单办法
- 【Java8新特性】01 函数式接口和Lambda表达式你真的会了吗
- 只出现一次的元素
- 【排序】堆排序
- redis灵魂拷问:怎样搭建一个哨兵主从集群
- 是时候给你的鼠标指针更换样式换下风格体验了!如何卸载与安装鼠标指针?