基础数据结构【三】————老鼠走迷宫问题————堆栈应用
假设:老鼠在一个二维地图中i行走,地图中大部分路径被墙阻断,无法前进。老鼠可以按照尝试错误的方法找到出口。只是,这只老鼠必须具备走错路时候就退回来,并且把走过的路记下来,避免下次走重复路,知道找到出口。
1.一次只能走一格。
2.遇到墙饰无法前进,退回,找其他方向的路,看是否可以走通。
3.走过的路不会在走第二次。
先利用二维数组MAZE[row][col]生成仿真迷宫,
MAZE[i][j] = 1 ,表示[i][j]位置处有墙,无法通过
MAZE[i][j] = 10,表示[i][j]位置处无墙,可以通过
MAZE[1][1] 为入口,MAZE[m][n]为出口,迷宫地图如下
int MAZE[10][12] = { 1,1,1,1,1,1,1,1,1,1,1,1, //声明迷宫数组
1,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,0,1,1,0,0,0,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,0,0,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,1,1,1,0,1,1,0,1,1,
1,1,0,0,0,0,0,0,1,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1 };
//int main()
//{
// std::cout << "Hello World!\n";
//}
#include <iostream>
#define EAST MAZE[x][y+1] //定义东方的相对位置
#define WEST MAZE[x][y-1] //定义西方的相对位置
#define SOUTH MAZE[x+1][y] //定义南方的相对位置
#define NORTH MAZE[x-1][y] //定义北方的相对位置
using namespace std;
const int ExitX = 8; //定义出口的X坐标在第8行
const int ExitY = 10; //定义出口的Y坐标在第10列
struct list
{int x, y;struct list* next;
};
typedef struct list node;
typedef node* link;
int MAZE[10][12] = { 1,1,1,1,1,1,1,1,1,1,1,1, //声明迷宫数组1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 };
link push(link stack, int x, int y);
link pop(link stack, int* x, int* y);
int chkExit(int, int, int, int);
int main(void)
{int i, j;link path = NULL;int x = 1; //入口的X坐标int y = 1; //入口的Y坐标cout << "[迷宫的路径(0的部分)]" << endl; //打印出迷宫的路径图for (i = 0; i < 10; i++){for (j = 0; j < 12; j++)cout << MAZE[i][j] << " ";cout << endl;}while (x <= ExitX && y <= ExitY){MAZE[x][y] = 2;if (NORTH == 0){x -= 1;path = push(path, x, y);}else if (SOUTH == 0){x += 1;path = push(path, x, y);}else if (WEST == 0){y -= 1;path = push(path, x, y);}else if (EAST == 0){y += 1;path = push(path, x, y);}else if (chkExit(x, y, ExitX, ExitY) == 1) //检查是否走到出口了break;else{MAZE[x][y] = 2;path = pop(path, &x, &y);}}cout << "[老鼠走过的路径(2的部分)]" << endl; //打印出老鼠成功走出迷宫的路径图for (i = 0; i < 10; i++){for (j = 0; j < 12; j++)cout << MAZE[i][j] << " ";cout << endl;}system("pause");return 0;
}
link push(link stack, int x, int y)
{link newnode;newnode = new node;if (!newnode){cout << "Error!内存分配失败!" << endl;return NULL;}newnode->x = x;newnode->y = y;newnode->next = stack;stack = newnode;return stack;
}
link pop(link stack, int* x, int* y)
{link top;if (stack != NULL){top = stack;stack = stack->next;*x = top->x;*y = top->y;delete top;return stack;}else*x = -1;return stack;
}
int chkExit(int x, int y, int ex, int ey)
{if (x == ex && y == ey){if (NORTH == 1 || SOUTH == 1 || WEST == 1 || EAST == 2)return 1;if (NORTH == 1 || SOUTH == 1 || WEST == 2 || EAST == 1)return 1;if (NORTH == 1 || SOUTH == 2 || WEST == 1 || EAST == 1)return 1;if (NORTH == 2 || SOUTH == 1 || WEST == 1 || EAST == 1)return 1;}return 0;
}
#include <iostream>//
//连接图像中断裂的边缘
//以某一点(i,j)为中心,分析它的八邻域
//int ConnectEdge(IplImage* src)
{if (NULL == src)return 1;int width = src->width;int height = src->height;uchar* data = (uchar*)src->imageData;for (int i = 2; i < height - 2; i++){for (int j = 2; j < width - 2; j++){//如果该中心点为255,则考虑它的八邻域if (data[i * src->widthStep + j] == 255){int num = 0;for (int k = -1; k < 2; k++){for (int l = -1; l < 2; l++){//如果八邻域中有灰度值为0的点,则去找该点的十六邻域if (k != 0 && l != 0 && data[(i + k) * src->widthStep + j + l] == 255)num++;}}//如果八邻域中只有一个点是255,说明该中心点为端点,则考虑他的十六邻域if (num == 1){for (int k = -2; k < 3; k++){for (int l = -2; l < 3; l++){//如果该点的十六邻域中有255的点,则该点与中心点之间的点置为255if (!(k < 2 && k > -2 && l < 2 && l > -2) && data[(i + k) * src->widthStep + j + l] == 255){data[(i + k / 2) * src->widthStep + j + l / 2] = 255;}}}}}}}
}
相关文章:

eclipse Debug中step into功能失灵的问题
step into 和 step over功能一样,无法进入方法内部,解决方法如下: 需要使用jdk中的jre,而不是独立安装的jre 再次Debug,当运行到断点的时候,点击step into(F5)就可以看见println函数…

Linux 基金会宣布红队项目,致力于孵化开源安全工具
百度智能云 云生态狂欢季 热门云产品1折起>>> 谁都想软件有着很高的安全性吧。毕竟,每一天都会有不一样的安全漏洞,从糟糕软件的沼泽中冒出来。 在近期举办的开源领导力峰会上,Linux 基金会宣布了新的红队项目(Red Tea…

基础数据结构【四】————环形链表与多项式
主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 。双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch03_08.cpp [示范]:环形链表节点的创…

关联scala源码
首先需要去官网下载sources 将下载好的压缩包拷贝到scala安装的lib目录下,解压 ctrlb以后 查看源码, 选择要查看的方法或者类, 输入 ctrl b import scala.io.StdIn 如果想看StdIn的源码,则将光标放在StdIn处,ctrlb 如果想查看io包下的内容&…

MySQL安装使用的2个问题
问题:1.遇到不输入密码能登上 ,使用密码报错.2.(解压版的) 在cmd输入>mysql –u root –p 时,按enter回车时,会叫你输入密码Enter password____,否则出现错误:ERROR 1045(28000):Access denied for user’root’’localhost’(using passw…

Flink1.7.2 sql 批处理示例
Flink1.7.2 sql 批处理示例 源码 https://github.com/opensourceteams/flink-maven-scala概述 本文为Flink sql Dataset 示例主要操作包括:Scan / Select,as (table),as (column),limit,Where / Filter,between and (where),Sum,min,max,avg,(group by ),group by having,disti…

ISP 【一】————boost标准库使用——批量读取保存文件 /boost第三方库的使用及其cmake添加,图像gramma
CMakeLists.txt文件中需要添加第三方库,并企鹅在CMakeLists.txt中添加 include_directories(${PROJECT_SOURCE_DIR}/../3party/gflags-2.2.2/include) link_directories(${PROJECT_SOURCE_DIR}/../3party/boost-1.73.0/lib-import) target_link_libraries( gram…

简单ajax类, 比较小, 只用ajax功能时, 可以考虑它
忘了哪儿转来的了, 不时的能够用上, 留存一下<script language"javascript" type"text/javascript"> /***var ajaxAjax();/*get使用方式* /ajax.get("php_server.php?id1&namexxx", function(data){ alert(data); //d…

Hadoop 三大发行版本
Hadoop三大发行版本:Apache、Cloudera、Hortonworks。 Apache版本最原始(最基础)的版本,对于入门学习最好。 Cloudera在大型互联网企业中用的较多。 Hortonworks文档较好。 1. Apache Hadoop 官网地址:http://had…

MongoDB主动撤回SSPL的开源许可申请
2018年10月,MongoDB将其开源协议更换为SSPL,虽然在当时引起了很大的争议,但是MongoDB始终坚信SSPL符合符合开源计划的批准标准,并向Open Source Initiative (以下简称OSI)提交了申请。不过,近日…

MATLAB【八】———— matlab 读取单个(多个)文件夹中所有图像
0.matlab 移动(复制)文件到另一个文件夹 sourcePath .\Square_train; targetPath .\Square_test; fileList dir(sourcePath); for k 3 :5: length(fileList) movefile([sourcePath,\,fileList(k).name],targetPath); end %copyfile([sourcePat…

JAVA IO学习
2019独角兽企业重金招聘Python工程师标准>>> 很多初学者接触IO时,总是感觉东西太多,杂乱的分不清楚。其实里面用到了装饰器模式封装,把里面的接口梳理一下之后,就会觉得其实蛮清晰的 相关的接口和类 接口或类描述Input…

Java面向对象三大特征 之 多态性
1、理解多态性:可以理解为一个事物的多种形态 2、对象的多态性:父类的引用指向子类的对象(子类的对象赋给父类的引用) 3、多态的使用:虚拟方法的调用 子类中定义了与父类同名同参数的方法(重写ÿ…

Bootstrap3基础 btn-group-vertical 按钮组(横着、竖着排列)
内容参数OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor Visual Studio Code 1.32.1 typesetting Markdowncode <!DOCTYPE html> <html lang"zh-CN"><head><meta charset&quo…

ISP【二】————camera ir图
1. 加串解串芯片作用? A: 加串和解串是成对出现的,串行器在模组内,将并行信号转换为串行信号,然后用一根线可以实现远距离传输。sensor输出的raw data如果不加串,需要8根线传输,很难传输很远&a…

Hadoop运行模式 之 本地运行模式
Hadoop的运行模式包括:本地模式、伪分布式模式以及完全分布式模式 Hadoop官网地址:https://hadoop.apache.org/ 本次使用的Hadoop的版本是2.7.2 官网文档:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/Single…

一些使用Vim的小技巧
7.增加注释(一个操作应用在多行)比如需要增加#或者是//这种注释:Ctrl v 定位到开始行,然后选定需要的行,然后执行 I命令,然后输入 # 或 //,然后按 Esc键两次,即可把注释操作应用到所…

SpringBoot注解大全 转
2019年3月17日22:30:10 一、注解(annotations)列表 SpringBootApplication:包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。 Configuration 等同于spring的XML配置…

MATLAB【九】————ICP算法实现
1.ICP推导与求解 https://zhuanlan.zhihu.com/p/35893884 2.算法实现: % 程序说明:输入data_source和data_target两个点云,找寻将data_source映射到data_targe的旋转和平移参数 clear; close all; clc; %% 参数配置 kd 1; inlier_ratio …

Centos 7环境下源码安装PostgreSQL数据库
马上就要去实习了,工作内容是搞数据仓库方面的,用的是postgresql关系型数据库,于是自己先来了解下这种数据的用法,之后说说这个数据库和MySQL的关系和区别。 1.Postgresql简介 看了下官网上的介绍,全球最高级的开源关系…

Oracle job procedure 存储过程定时任务
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。 一、查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; select * from all_jobs; select * from user_jobs; -…

Hadoop运行模式 之 伪分布式运行模式
什么是伪分布式模式?它与本地运行模式以及完全分布式模式有什么区别? 伪分布式的配置信息,完全是按照完全分布式的模式去搭建的,但是它只有一台服务器,可以用于学习和测试,真正的开发中不可以使用。 目录…

【C++】【一】结构体数组
demo7:函数份文件编写 swap.h #include <iostream> using namespace std;//函数的声明 void swap(int a, int b); swap.cpp #include "swap.h"//函数的定义 void swap(int a, int b) {int temp a;a b;b temp;cout << "a " << a …

Message、Handler、Message Queue、Looper之间的关系
2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制。Message Queue(消息队列), 线程间的通信可以通过Message Queue、Handler和Looper进行信息交换。下面将对它们进行逐…

在linux中只将“桌面”修改成“Desktop”而系统仍然使用中文
在安装好centos系统以后,它的Desktop,Downloads等文件夹都是中文的,桌面,下载等,这样在使用cd命令时特别不方便 解决方法一:下载一个中文输入法,安装 解决方法二: 修改il8n文件&a…

Zabbix 3.0 从入门到精通(zabbix使用详解)
第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也称为可用性,英文描述为HA,High Avail…

MacBook如何用Parallels Desktop安装windows7/8
虽然MacBook真的很好用,不过在天朝的国情下,有很多软件还是仅支持IE和windows系统下才有。所以有必要为自己的MacBook装一个windows版本的系统,之前试过用Boot Camp来建立分区和安装win7,之后自己又用Parallels Desktop安装过win8…

在IDEA 中为Maven 配置阿里云镜像源
打开IntelliJ IDEA->Settings ->Build, Execution, Deployment -> Build Tools > Maven 注意要勾选上override 自己创建一个settings.xml文件, 内容如下 <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http:/…

【匹配算法】渐进一致采样 PROSAC(PROgressive SAmple Consensus)
方法简介 渐进一致采样法1 (PROSAC) 是对经典的 RANSAC2 中采样的一种优化。相比经典的 RANSAC 方法均匀地从整个集合中采样,PROSAC 方法是从不断增大的最佳对应点集合中进行采样的。所以这种方法可以节省计算量,提高运行速度。 论文:https:…

阿里巴巴开源的 Blink 实时计算框架真香
Blink 开源了有一段时间了,竟然没发现有人写相关的博客,其实我已经在我的知识星球里开始写了,今天来看看 Blink 为什么香? 我们先看看 Blink 黑色版本: 对比下 Flink 版本你就知道黑色版本多好看了。 你上传 jar 包的时…