完整数据结构 迷宫求解Word文档下载推荐.docx

上传人:b****1 文档编号:13708053 上传时间:2022-10-13 格式:DOCX 页数:15 大小:66.46KB
下载 相关 举报
完整数据结构 迷宫求解Word文档下载推荐.docx_第1页
第1页 / 共15页
完整数据结构 迷宫求解Word文档下载推荐.docx_第2页
第2页 / 共15页
完整数据结构 迷宫求解Word文档下载推荐.docx_第3页
第3页 / 共15页
完整数据结构 迷宫求解Word文档下载推荐.docx_第4页
第4页 / 共15页
完整数据结构 迷宫求解Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

完整数据结构 迷宫求解Word文档下载推荐.docx

《完整数据结构 迷宫求解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整数据结构 迷宫求解Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

完整数据结构 迷宫求解Word文档下载推荐.docx

为处理方便起见,可在迷宫的四周加一圈障碍。

对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

本程序包含三个模块

1)主程序模块:

voidmain()

初始化;

do{

接受命令;

处理命令;

}while(命令!

=退出);

2)栈模块-—实现栈抽象数据类型;

3)迷宫模块-—实现迷宫抽象数据类型。

【源代码】

#include<

stdlib。

h>

//库中包含system("

pause"

)和rand()函数

stdio.h>

//c语言里的库

#include〈iostream>

#include〈malloc.h>

#defineOK1

#defineERROR0

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

#defineOVERFLOW—1

#defineM49

#defineN49

usingnamespacestd;

intmaze[M][N];

typedefintStatus;

typedefstruct

{

intm,n,direc;

}MazeType,*LMazeType;

LMazeTypetop;

LMazeTypebase;

intstacksize;

intover;

}Stack;

voidInit_hand_Maze(intmaze[M][N],intm,intn)

inti,j;

for(i=1;

i<

=m+1;

i++)

for(j=1;

j<

=n+1;

j++)

{

maze[i][j]=1;

}

cout<

〈”请按行输入迷宫,0表示通路,1表示障碍:

”<

<

endl;

m+1;

n+1;

cin>

>

maze[i][j];

i〈m+1;

for(j=1;

j〈n+1;

j++)

if(maze[i][j]!

=0&&

maze[i][j]!

=1){

cout〈<

”您输入有误,请重新输入"

Init_hand_Maze(maze,m,n);

}

}

}

voidInit_automatic_Maze(intmaze[M][N],intm,intn)//自动生成迷宫

inti,j;

〈"

\n迷宫生成中……\n\n”;

system(”pause"

);

for(i=1;

i〈m+1;

for(j=1;

maze[i][j]=rand()%2;

//随机生成0、1

voidPrintMaze(intmaze[M][N],introw,intcol)

inti,j;

〈”迷宫如图所示。

”〈〈endl;

i〈row+1;

for(j=1;

col+1;

if(maze[i][j]==1)

〈”■"

;

else

□"

cout〈〈endl;

}

StatusInitStack(Stack&S)

S。

base=(LMazeType)malloc(STACK_INIT_SIZE*sizeof(MazeType));

if(!

S。

base)exit(OVERFLOW);

top=S.base;

stacksize=STACK_INIT_SIZE;

over=0;

returnOK;

}

StatusPush(Stack&

S,MazeTypee)

if(S。

top—S.base>

=S。

stacksize)

base=(LMazeType)realloc(S.base,(S。

stacksize+STACKINCREMENT)*sizeof(MazeType));

if(!

base)exit(OVERFLOW);

S.top=S.base+S。

stacksize;

stacksize+=STACKINCREMENT;

*S。

top++=e;

returnOK;

StatusPop(Stack&S,MazeType&e)

if(S.top==S.base)returnERROR;

e=*——S.top;

StatusMazePath(Stack&

S,MazeType&e,intmaze[M][N],intm,intn)

do

if(maze[e。

m][e.n]==0)//0可通,1不可通,2为已走过

Push(S,e);

maze[e。

m][e.n]=2;

if(e。

m==m&&

e.n==n)

S.over=1;

//表示存满一条路径

else{

e。

n++;

e.direc=0;

//来这一点时的方向,0右1下2左3上

MazePath(S,e,maze,m,n);

top!

base&&S.over!

=1)

switch(e。

direc)//回到上一位置并同时改变方向走下一步

case0:

n-—;

e.m++;

e.direc=1;

break;

case1:

e.m--;

e.n——;

direc=2;

break;

case2:

e.n++;

m—-;

direc=3;

case3:

Pop(S,e);

}while(S。

=S.base&&

over!

=1);

intPrintPath(StackS,intmaze[M][N],introw,intcol)

if(S.top==S.base)

cout〈<

"

\n===============================================\n”;

〈”此迷宫无解\n\n"

returnERROR;

MazeTypee;

while(S.top!

=S.base)

maze[e.m][e.n]=(e。

direc+10);

cout〈〈"

完成!

endl;

”\n===============================================\n”;

路径为:

row+1;

j〈col+1;

switch(maze[i][j])

case0:

”□"

”■”;

※”;

case10:

”→"

case11:

↓"

case12:

”←"

case13:

↑"

〈endl;

cout<

入口"

〈<

”完成!

〈endl;

intmain()

inti,m,n,maze[M][N],cycle=0;

while(cycle!

=(—1))

********************************************************************************\n”;

欢迎进入迷宫求解系统\n”;

********************************************************************************\n”;

cout〈〈”☆1手动生成迷宫☆\n”;

☆2自动生成迷宫☆\n"

”☆3退出☆\n\n"

”********************************************************************************\n”;

”\n"

cout〈〈”请选择你的操作:

\n”;

i;

switch(i)

cout〈<

\n请输入行数:

”;

cin>

〉m;

〈”\n”;

”请输入列数:

cin〉〉n;

while((m<

1||m〉49)||(n<

1||n>

49))

{

cout<

\n抱歉,你输入的行列数超出预设范围(1-49,1-49),请重新输入:

\n\n”;

cout〈<

”\n请输入行数:

cin〉>

m;

〈”\n"

co

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1