C++实现随机生成迷宫地图自动完成寻径

article/2025/3/11 11:19:26
#include<iostream>
#include<stack>
#include<vector>
using namespace std;template<class T>
class Maze {
public:Maze(						 //默认参数值pair<int, int>			 initSize	   = make_pair(15, 17),pair<string, string>	 initStyle	   = make_pair("█", "□"), vector<string>			 initPathStyle = { string("⊙") },//☆⊙pair<int, int>			 initEn        = make_pair(1, 1)) :						 //初始化maze_size(initSize),maze_style(initStyle),maze_path_style(initPathStyle),maze_entrance(initEn),maze_export(initSize),maze_direction({{0,1},{1,0},{0,-1},{-1,0}}){runMaze();}private:pair<int, int>						maze_size;			//迷宫大小pair<string, string>				maze_style;			//迷宫样式vector<string>						maze_path_style;	//路径样式pair<int, int>						maze_entrance;		//迷宫入口pair<int, int>						maze_export;		//迷宫出口vector<vector<int>>					maze_vector;		//迷宫数组stack<pair<int, int>>				maze_path;			//迷宫路径vector<pair<int, int>>				maze_direction;		//寻径方向vector<vector<int>>					maze_random_vector;	//随机生成的有效迷宫vector<pair<int, int>>				maze_path_point;	//迷宫路径点坐标集合void initMaze();					//初始化迷宫数据bool findPath();					//寻找成功的路径void createMazeMap();				//创建迷宫地图void delay(double t = 0.1);			//延迟函数void outputMazeMap();				//输出迷宫地图void runMaze();						//运行迷宫
};template<class T>
void Maze<T>::initMaze() {vector<int> temp;maze_vector.clear();maze_random_vector.clear();maze_path_point.clear();for (int i = 0; i <= maze_size.first + 1; i++) {for (int j = 0; j <= maze_size.second + 1; j++) {if (i == 0 || i == maze_size.first + 1 || j == 0 || j == maze_size.second + 1) {temp.push_back(1);}else if (make_pair(i, j) == maze_entrance || make_pair(i, j) == maze_export) {temp.push_back(0);} else {temp.push_back(rand() % 2);}}maze_vector.push_back(temp);temp.clear();}maze_random_vector = maze_vector;
}template<class T>
bool Maze<T>::findPath() {pair<int, int> current_location = maze_entrance;	//当前位置等于迷宫入口maze_vector.at(1).at(1) = 1;						//标记入口值为1int selected_direction = 0;							//当前执行的方向int other_direction = 3;							//剩余其他方向while (current_location != maze_export) {int new_row, new_col;while (selected_direction <= other_direction) {new_row = current_location.first + maze_direction.at(selected_direction).first;new_col = current_location.second + maze_direction.at(selected_direction).second;if (maze_vector.at(new_row).at(new_col) == 0)break;selected_direction++;}if (selected_direction <= other_direction) {maze_path.push(current_location);current_location.first = new_row;current_location.second = new_col;maze_vector.at(new_row).at(new_col) = 1;selected_direction = 0;}else {if (maze_path.empty())return false;pair<int, int> temp = maze_path.top();maze_path.pop();if (temp.first == current_location.first)selected_direction = 2 + temp.second - current_location.second;elseselected_direction = 3 + temp.first - current_location.first;current_location = temp;}}maze_path.push(current_location);return true;
}template<class T>
void Maze<T>::createMazeMap() {//随机生成迷宫地图srand(time(0));initMaze();while (!findPath()) {cout << "迷宫生成中..." << endl;system("cls");initMaze();}//将迷宫路径点导入到vectorwhile (!maze_path.empty()) {maze_path_point.push_back(maze_path.top());maze_path.pop();}
}template<class T>
void Maze<T>::delay(double t) {clock_t start_time;start_time = clock();while ((clock() - start_time) < t * CLOCKS_PER_SEC) {}
}template<class T>
void Maze<T>::outputMazeMap() {//反序输出vector<pair<int, int>>::reverse_iterator it = maze_path_point.rbegin();for (; it != maze_path_point.rend(); it++) {maze_random_vector.at(it->first).at(it->second) = 3;for (auto i : maze_random_vector) {for (auto j : i) {if (!j)cout << maze_style.first;elseif (j == 1)cout << maze_style.second;elsecout << maze_path_style.at(0);}cout << endl;}if (*it == maze_export)system("pause");delay(0.155);system("cls");}
}template<class T>
void Maze<T>::runMaze() {createMazeMap();outputMazeMap();
}int main() {Maze<int> m;system("pause");return 0;
}

运行后效果

 


http://chatgpt.dhexx.cn/article/ZaqRdB9s.shtml

相关文章

Python 制作迷宫游戏(一)——地图

Python 制作迷宫游戏&#xff08;一&#xff09;——地图 序 作为一个迷宫类的游戏&#xff0c;其最重要的是什么&#xff1f;当然是它的地图啦♪(∇*) 那么我们又该如何制作一张迷宫地图呢⊙(・◇・)&#xff1f; 很显然&#xff0c;我们不可能一张张自己画吧 网络上常见的迷…

三套简单的迷宫地图生成方案

地图基础 地图的形式很多&#xff0c;这里我使用的地图是以tile块为单位分割的地图&#xff0c;地图上的tile块形式很多&#xff0c;但主要分成三种&#xff1a; A&#xff1a;陆地&#xff0c;可以在上面分布一些角色啦物件啦&#xff1b; B&#xff1a;过渡&#xff0c;根据物…

SenticNet情感词典介绍

在进行情感分析时&#xff0c;一个好的情感词典能够让我们的工作事半功倍&#xff0c;较为出名的情感词典有SentiWordNet&#xff0c;General Inquirer等&#xff0c;这篇博客将介绍另外一个出色情感词典&#xff0c;SenticNet。 简介 当谈论SenticNet时&#xff0c;我们正在…

中文金融领域情感词典构建

2019年10月4日-6日 Python爬虫与文本分析工作坊 & 课题申报高级研修班 这篇文章是公众号关注者郝童鞋今早发给我的&#xff0c;在此谢谢郝童鞋。 文章基于简单算法和人工判断&#xff0c;使用多阶段剔除法&#xff0c;构建了 中文金融情感词典CFSD&#xff08;ChineseFinan…

《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算

本文主要是学习参考杨秀璋老师的博客,笔记总结。 原文链接 文章目录 书山有路勤为径&#xff0c;学海无涯苦作舟原文链接一.大连理工情感词典二、七种情绪的计算2.1 pandas读取数据2.2 导入大连理工大学中文情感词典2.3 统计七种情绪的分布情况2.4 增加中文分词词典和自定义的停…

中文情感词典的构建

首先&#xff0c;国外英文的情感分析已经取得了很好的效果&#xff0c;得益于英文单词自身分析的便捷性与英文大量的数据集 WordNet。但由于中文的多变性&#xff0c;语义的多重性与数据集的缺乏&#xff0c;使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词…

基于情感词典的网络文本情感倾向分类模型

目录 前言一、模型构建1.归类2.判定3.输出 二、代码实现三、结果展示 前言 文本情感倾向性分析&#xff08;也称为意见挖掘&#xff09;是指识别和提取原素材中的主观信息&#xff0c;并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容&#xf…

使用SO-PMI算法构建行业/专业情感词典

文章目录 1. 情感词典内容2. 情感倾向点互信息算法&#xff08;SO-PMI&#xff09;算法点互信息算法 PMI情感倾向点互信息算法 SO-PMI 3. 构建情感词典1. 导入项目2. 构建情感种子词3. 使用TF-IDF方便构建情感种子词4. 构建专业词典的效果与使用方法5. 其他说明 1. 情感词典内容…

在微雕中使用的电脑设计

需求是我们要在铜器上复刻很小的凹印,可以选用的技术方案还是很多:激光雕刻,篆刻、钢印。 激光雕刻有利有弊,前期复制是最方便的,激光雕刻有专门的设计软件,可以很轻松的把自己的图案运用到机器上去。制作和时间的成本都非常的低,但是激光对金属的雕刻有一个大大的缺点…

闲人闲谈PS之四十二——顾问的“禁忌之地”—制造能力计划

惯例闲话&#xff1a;上个月有幸成为乐老师乐谈IT系列培训课程的讲师&#xff0c;分享主题是&#xff0c;PS在装备制造和工程行业的应用。虽然培训规模不是很大&#xff0c;但是闲人很有信心&#xff0c;至少在小范围之内&#xff0c;参与培训的听友人来说&#xff0c;PS一直以…

ibm x201 怎么清理内部_ThinkPad X201拆解,联想Thinkpad X201拆机图解

1.jpg (25.79 KB, 下载次数: 2552) 2010-6-1 20:13 上传 ThinkPad X201掌托&#xff0c;没有防滚架&#xff0c;这个掌托就显得很软。电磁屏蔽做得很用心。 2.jpg (39.16 KB, 下载次数: 2556) 2010-6-1 20:13 上传 ThinkPad X201掌托特写&#xff0c;可以看到掌托塑料件是MITSU…

学习opencv:PS滤镜—浮雕

实现浮雕效果的算子有很多&#xff0c;效果大同小异&#xff0c;不同算子的处理结果在细节上会有所差异。事实上&#xff0c;任何一阶差分算子都可用于实现浮雕效果&#xff0c;简单起见&#xff0c;这里使用算子[-1,1]。 代码如下 #include<iostream> #include <…

ps给图片加钢印方法

给图片加一个钢印其实很简单 这样的效果只能类似钢印 简单可以按照下面的方法 准备资料 &#xff1a;一个要加钢印的图片 一个透明印章即可实现 方法&#xff1a;斜面和浮雕 一、打开图片 二、打开透明印章 三、将透明印章移动到图片中 四、进行图层设置 右击印章图层---混合…

PS钢印效果制作

PS制作钢印效果一法 转载教程:严禁做假.... 附件 1.jpg (37.05 KB) 2008-6-10 22:39 2.jpg (33.59 KB) 2008-6-10 22:39 3.jpg (38.57 KB) 2008-6-10 22:39 4.jpg (42.49 KB) 2008-6-10 22:39 5.jpg (39.2 KB) 2008-6-10 22:39 6.jpg (44.63 KB) 2008-6-10 22:39 7.jpg…

Oracle中extract()函数

oracle中extract()函数从oracle 9i中引入的,主要作用于一个date或者interval类型中截取特定的部分 extract()语法如下&#xff1a; extract ( { year | month | day | hour | minute | second | 某一时区 } from { date类型值 | interval类型值} ) 要点一&#xff1a;extract()…

oracle ora-01652:无法通过1024(在表空间SYSTEM中)拓展temp段

1.报错 2.查询拓展表空间 2.1查看表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.…

hpux oracle10.2.0.4下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS

hpux oracle10.2.0.4 rac 下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS hpux 11.31 oracle10.2.0.4 rac ,2 nodes 值得注意的是&#xff0c;报的是不能在CARDTS表空间中扩展temp段。。。 后来查询metalink 文章&#xff0c; Troubleshooting ORA-1…

原创:oracle中单行函数介绍 lt;五gt;

在SQL中有两种函数一种是单行函数&#xff0c;一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、转换和混合型等多种函数用于处理单行数据,因此这些都被称为单行函数.这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函…

EXPDP报错:ORA-60019 creating initial extent of size 14 in tablespace of extent size 8

一、原因概述 和SecureFiles新的LOB架构相关。11g之前叫BasicFiles。在11g如果不特别指定&#xff0c;默认是会创建成BasicFiles LOB。但是在12c之后&#xff0c;LOB列在ASSM管理的表空间。默认都会创建成SecureFiles。 也就是DB_SECUREFILE初始化参数&#xff0c;在11g时&…

oracle 中 /*+ full(表名)*/ 优化详解

文章目录 hint 关键字&#xff1a; /* full(表名)*/可能遇到的问题别名为 "SELxx" hint 关键字&#xff1a; / full(表名)/ 一般来说&#xff0c;sql 优化时&#xff0c;尽量走 index&#xff0c;但不绝对有时候&#xff0c;全表扫描的效率比索引高 索引 和 全表扫…