c++实现迷宫的具体代码

  介绍

小编给大家分享一下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++实现迷宫的具体代码