- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
堆栈遍历求解迷宫(程序说明书)分析
《数据结构》
课程设计
姓名 虞嘉尧
班级 信科1301
学号
程序名:迷宫求解
实验环境:
Visual c++ 6.0 语言c++
实现功能:
随机生成一个迷宫并判断此迷宫是否走得通
主要算法:
从入口出发,以右、下、上、左方向顺序试探下一坐标是否走得通,同时将可走方位保存,再进行下一步试探,用堆栈方式实现迷宫遍历。
运行界面:
实例:
主要源代码:
#include iostream
#include windows.h
#include time.h
#include stack
using namespace std;
typedef struct seat//坐标
{
int x;
int y;
int di;
}Seat;
typedef struct _stack//节点
{
Seat seat;
struct _stack *next;
}MyStack, Head;
int m,n;
int maze[30][30];
int InMaze();//初始化迷宫
int PrintMaze();//打印迷宫
void Dis(stackSeat );//走完后路径打印
void GetNext(Seat , Seat );//获取下一个坐标
void InData(Seat , Seat , Seat , Seat );//初始化位置
int NextPas(Seat , Seat , stackSeat );//判定下一个坐标是否通过
int main()
{
int flag = 0;
stackSeat road;
Seat start, end, next, cur;
while(1)
{
InMaze();
InData(start, end, cur, next);
system(cls);
PrintMaze();
flag = 0;
while(!road.empty())
road.pop();
while(1)
{
while(cur.di = 4)
{
++cur.di;
maze[cur.x][cur.y] = 2;
if(cur.x == end.x cur.y == end.y)
{
cur.di = 8;
road.push(cur);
cout\n\n成功走出!\n\n路径:\n;
stackSeat temp;
Seat a;
while(!road.empty())
{
a = road.top();
road.pop();
temp.push(a);
}
Dis(temp);
flag = 1;
break;
}
GetNext(cur, next);
if(NextPas(cur, next, road))
{
cur = next;
Sleep(500);
system(cls);
PrintMaze();
}
}
if(flag == 1)
break;
maze[cur.x][cur.y] = 7;
if(road.empty())
{
cout\n\n无法走出\n\n;
flag = 1;
break;
}
if(flag == 1)
break;
cur = road.top();
road.pop();
}
system(pause);
}
文档评论(0)