数据结构:栈和队列-迷宫问题求解

这个程序演示了如何利用栈和链表数据结构解决迷宫问题。首先随机生成迷宫地图,然后从入口开始,通过栈来搜索路径。如果当前位置可通,则将其入栈,若到达出口则结束。否则,回溯并尝试其他路径。如果找不到出口,程序会生成新的地图并显示。主要算法包括初始化迷宫、寻找出口路径和显示地图。
摘要由CSDN通过智能技术生成

//--------------------文件名:Maze.cpp------------------------
//----------------------By SunxySong-------------------------
//说明:本程序以迷宫问题进行演示,了解栈和链表的数据结构.
//运行过程:随机生成迷宫地图(由于未详细设计算法,故地图较简单),
//         并演示找到出口路径的过程.

//主要算法思想:
// 1.初始化迷宫,构造辅助运行栈和结果链表
// 2.从入口开始
// do
// {
//  if (当前位置可通)
//  {
//   当前位置入栈
//   if (当前位置是出口)
//   {
//    结束
//   }
//   else
//   {
//    取得当前位置当前方向上的下一位置为当前位置
//    将新当前位置入栈
//   }
//  }
//  else
//  {
//   从栈中弹出栈顶元素为当前位置
//   while(当前位置已无下一有效位置 && 栈不为空)
//   {
//    将当前位置标记为无效
//    弹出栈顶元素为当前位置
//   }
//   if (当前位置还有下一有效位置时)
//   {
//    当前位置方向调整
//    当前位置进栈
//    取得取得当前位置当前方向上的下一位置为当前位置
//   }
//  }
// }while(栈不为空时);
// 未找到出口
// 3.生成新地图
// 4.显示地图
//
//源代码在VC6+WIN2000sp2下编译通过

#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <list>
#include <stack>
#include <time.h>

using namespace std;


//class:MazePos-----------------------------------------
//迷宫通道块类型
class MazePos
{
public:
 int wx,ly; //块的X,Y坐标 
 int path; //块的类型;0:空块,-1:墙壁,1:出口路径
 bool pass; //是否曾经过(对墙壁无意义);false:没有,true:曾经过
 bool operator==(const MazePos pos)
 {
  return (wx==pos.wx && ly==pos.ly );
 };
 MazePos operator=(const MazePos pos)
 {
  
  wx=pos.wx;
  ly=pos.ly;
  pass=pos.pass;
  path=pos.path;
  return *this;
 };
};
//End:MazePos---------------------------------------


//class:SElemType-----------------------------------------
//辅助栈元素类型
class SElemType
{
public:
 int ord; //迷宫通道块路径上的序号
 MazePos seat;  //通道块在迷宫中的位置坐标
 int di;  //从此通道块走向下一通道块的方向
    //0:无效,1:东,2:南,3:西,4:北
 bool operator==(const SElemType et)
 {
  return (seat==et.seat); 
 };
 SElemType operator=(const S

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值