小编给大家分享一下c++实现迷宫的具体代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>一、,实验目的:强>
(1),熟练掌握链栈的基本操作及应用。
(2),利用链表作为栈的存储结构,设计实现一个求解迷宫的非递归程序。
<强>二、实验内容:强>
<强>【问题描述】强>
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
<强>【基本要求】强>
首先实现一个链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i, j, d)的形式输出,其中:(i, j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1、2、2),(2,2,2),(3、2、3),(3、1、2),……。
<强>【测试数据】/strong> 强>
迷宫的测试数据如下:左上角(1,1)为入口,右下角(8、9)为出口。
1,,2,,3,,4,,5,,6,,7,,8
0, 0, 1, 0, 0, 0, 1, 0
0, 0, 1, 0, 0, 0, 1, 0
0, 0, 0, 0, 1, 1, 0, 1
0, 1, 1, 1, 0, 0, 1, 0
0, 0, 0, 1, 0, 0, 0, 0
0, - 1, 0, 0, 0, 1, 0, 1
0, 1, 1, 1, 1, 0, 0, 1
1, 1, 0, 0, 0, 1, 0, 1
1, 1, 0, 0, 0, 0, 0, 0
<强>【实现提示】强>
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进,否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到则未能到达出口,则所设定的迷宫没有通睡。
可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1)、出口点的下标为(n, n)。为处理方便起见,可以迷宫的四周加一圈障碍。对于迷宫任一位置,均可约定有东,南,西,北四个方向可通。
<强>【选作内容】强>
(1),编写递归形式的算法,求得迷宫中所有可能的通路;
(2),以方阵形式输出迷宫及其通路。
网友提供了一段解决算法:
# include# include # define m 4//行//列# define n 4 struct xy { int 才能;x; int 才能;y; }; typedef struct 堆栈 { struct 才能xy 协调; struct 堆栈*,才能下; }堆栈; void init(堆栈*,p) { ,, p→才能next =,空; } void 推动(堆栈*,p, struct xy  cdnt) { 堆栈*,才能temp =, p; 而才能(临时→next !=, NULL) ,,,temp =,临时→下; 堆栈*,才能newValue =,(堆栈*)malloc (sizeof (struct 堆栈)* 1); newValue→才能coordinate =, cdnt; newValue才能→next =,临时→下; 临时→才能next =, newValue; } void 流行(堆栈*,p) { 堆栈*,才能tempp =, p; 堆栈*,才能temp =, p→下; 而才能(临时→next !=, NULL) ,,,temp =,临时→接下来,tempp =, tempp→下; tempp→才能next =,空; 免费的才能(临时); } void 浏览(堆栈*,p) { 堆栈*,才能temp =, p→下; 而才能(temp !=, NULL) ,,,printf (“(% d % d) \ n",临时→coordinate.y,临时→coordinate.x), temp =,临时→下; } struct xy  getEnd (struct 堆栈*,p) { 堆栈*,才能temp =, p; 而才能(临时→next !=, NULL) ,,,temp =,临时→下; return 临时→才能协调; } int getSize(堆栈*,p) { int 才能;size =, 0; 堆栈*,才能temp =, p→下; 而才能(temp !=, NULL) {才能 ,,,大小+ +; ,,,temp =,临时→下; ,,} return 才能;规模; } int main () { int 才能;路径(m + 1) (n + 1),=, {0}; int 才能;col =, 0, row =, 0; int 才能;小姐:=,0,j =, 0; int 才能;temp_col =, 0, temp_row =, 0, t_col =, 0, t_row =, 0; int 才能;flag =, 0; struct 才能;xy  t_pair;//才能stack A, B; 堆栈*,才能Ahead =,(堆栈*)malloc (sizeof (struct 堆栈)* 1); 堆栈*,才能Bhead =,(堆栈*)malloc (sizeof (struct 堆栈)* 1); init(提前);才能,init (Bhead); 的才能(;i c++实现迷宫的具体代码