- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫问题c实验报告
数据结构实验报告
班级:
姓名:
学号:
组员:
问题描述:
迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走迷宫的路线。
设计功能要求:
迷宫由m行n列的二维数组设置,0表示无障碍,1表示有障碍。设入口为(1,1),出口为(m,n),每次只能从一个无障碍单元移到周围四个方向上任一无障碍单元。编程实现对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
算法输入:代表迷宫入口的坐标
算法输出:穿过迷宫的结果。 算法要点:创建迷宫,试探法查找路
任务分派
为了达到锻炼大家独立设计算法的能力,大家一致决定,先自己独立设计算法,不论算法的好坏、难易,完完全全出自于自己的手中。
在大家独立完成算法后,进行小组集中讨论,将自己的算法思想与大家交流,特别是自己最自豪的部分或是自己觉得可以改进的地方,之后得出最优结果。
独立设计
求解思想:
利用递归的方式进行求解。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达新点,否则试探下一方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的通路都探索到,或找到一条通路,或无路可走又返回到入口点。
如果现在位置(i,j)处于迷宫的边界位置,则有2种或3种可能的走法,为使问题简单化,用maze[m+2][n+2]来表示迷宫,而迷宫的四周的值全部为1,这样做使问题简单了,每个点的试探方向全部为4,不用再判断当前点的试探方向有几个,同时与迷宫周围是墙壁这一实际问题相一致。
struct Pos
{
int x,y;
int di;
};
其中x、y分别表示横纵坐标值、di表示前进的方向。
在已经某一位置(i, j, d)的情况下,其下一个位置横、纵坐标的取值如表4-2所示。而走到一个新位置时,其方向值初始置为1。
代码
#include iostream
#include iomanip
using namespace std;
struct Pos
{
int x,y;
int di;
};
typedef Pos ElemType;
struct StackNode
{
ElemType data;
struct StackNode *next;
};
class LinkStack
{
private:
StackNode *top;
public:
LinkStack();//无参构造函数
~LinkStack();//析构函数
void ClearStack();//将栈清空
bool Push(ElemType x); //进栈
bool Pop(ElemType x);//出栈
bool GetTop(ElemType x);//取栈顶元素
bool StackEmpty(); //判断栈是否为空栈
int StackLength(); //栈的长度
};
LinkStack::LinkStack()
{
top=NULL;
}
LinkStack::~LinkStack()
{
StackNode *p;
while(top!=NULL)
{
p=top;
top=top-next;
delete p;
}
}
bool LinkStack::StackEmpty()
{
if(!top)
return true;
return false;
}
int LinkStack::StackLength()
{
StackNode *p=top;
int count=0;
while(p)
{
count++;
p=p-next;
}
return count;
}
bool LinkStack::Push(ElemType x)
{
StackNode *p;
p=new StackNode;
p-data=x;
p-next=top;
top=p;
return true;
}
bool LinkStack::Pop(ElemType x)
{
if(StackEmpty())
return false;
else
{
StackNode *p=top;
x=top-data;
top=top-next;
delete p;
return true;
}
}
bool LinkStac
文档评论(0)