迷宫问题与火车重排问题.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

实验报告

实验课名称:数据结构实验

实验名称:迷宫问题与火车车厢重排问题

1.迷宫问题

一、问题描述

这是心理学中的一个经典问题。心理学家把一只老鼠从一个无顶盖的大盒子的入口处放入,让老鼠自行找到出口出来。迷宫中设置很多障碍阻止老鼠前行,迷宫唯一的出口处放有一块奶酪,吸引老鼠找到出口。

简而言之,迷宫问题是解决从布置了许多障碍的通道中寻找出路的问题。此题设置的迷宫如图1所示。

二、数据结构设计

由迷宫问题的问题描述可知,本实验中用于存储迷宫的数据结构为自定义结构体,其代码如下:

struct

{

inti;

intj;//当前坐标

intdi;//下个方向

}

存储路径的存储结构为栈,代码如下:

structstack

{

int*base;

int*top;

intstacksize;

};

三、算法设计

本实验采用栈存储路径,分别对每条路径进行尝试,如果下个方向为可通,那么入栈,否那么出栈。最终求解出所有路径。

数据输入:由于本实验中迷宫、入口及出口均在程序中设定,故无输入。

cout迷宫地图如下\n;

Print();//打印输出迷宫

cout请选择是否求解路径〔1求解,2退出〕;

调用求解迷宫路径的函数,其代码如下:

Step1:调用函数,代码如下:

if(x==1)

{

cout迷宫路径如下:\n;

mgpath();//调用求解路径函数

}

Step2:迷宫路径的求解,代码如下:

while(top-1)

{

i=Stack[top].i;

j=Stack[top].j;

di=Stack[top].di;

if(i==Mj==N)

{

coutcount++endl;

for(k=0;k=top;k++)

{

cout(Stack[k].i,Stack[k].j);

if((k+1)%5==0)cout\n;

}

cout\n;

if(top+1minlen)

{

for(k=0;k=top;k++)

Path[k]=Stack[k];

minlen=top+1;

}

mg[Stack[top].i][Stack[top].j]=0;

top--;

i=Stack[top].i;

j=Stack[top].j;

di=Stack[top].di;

}

find=0;

while(di4find==0)

{

di++;

switch(di)//判断下个方向是否可通

{

case0:i=Stack[top].i-1;j=Stack[top].j;break;

case1:i=Stack[top].i;j=Stack[top].j+1;break;

case2:i=Stack[top].i+1;j=Stack[top].j;break;

case3:i=Stack[top].i;j=Stack[top].j-1;break;

}

if(mg[i][j]==0)find=1;

}

if(find==1)

{

Stack[top].di=di;

top++;

Stack[top].i=i;

Stack[top].j=j;

Stack[top].di=-1;

mg[i][j]=-1;

}

else

{

mg[Stack[top].i][Stack[top].j]=0;

top--;

}

}

〔3〕输出

输出路径。代码如下:

cout(Path[k].i,Path[k].j);

if((k+1)%5==0)cout\n;

四、界面设计

程序包含提示提示当前迷宫功能和输出提示功能。

五、运行测试与分析

〔1〕运行程序,显示提示,如图1.1所示。

图1.1启动界面

输入“1”求解路径;输入“2”退出。根据提示,输入1。如图1.2所示。

图1.2数据输入界面

〔3〕数据结果输出。根据实验要求输出实验结果。如图1.3所示。

图1.3数据结果输出界面

六、实验收获与思考

收获:

通过本次实验,熟练掌握了栈构建并栈的插入、删除、判断是否为空操作。此外,对栈的先进后出特性有了更深刻的理解。

思考:

假设每个点有8个试探方向〔东、东南、南、西南、西、西北、北、东北〕,那么在试探方向选择语句中增加方向,对每个方向进行尝试;

假设要求得所有通路,那么需对每个路径进行遍历,将每种可能都进行尝试。

假设需要求得最短通路,将所有路径进行比拟,将最短通路输出。

2.火车车厢重排问题

一、问题描述

文档评论(0)

147****4268 + 关注
实名认证
文档贡献者

认真 负责 是我的态度

1亿VIP精品文档

相关文档