数据结构栈的应用(迷宫求解)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

栈的应用

迷宫求解

任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;

源代码:

#include

#include

/*数据定义*/

typedefenum { ERROR, OK } Status;

typedefstruct

{

int row; //row表示"行"号

int line; //line表示"列"号

}PosType; //位置的元素类型

typedefstruct

{

intord; //该通道在路径上的"序号"

PosType seat; //通道块在迷宫中的"坐标位置"

int di; //从此通道走向下以通道块的"方向"

}SElemType; //栈的元素类型

typedefstruct

{

SElemType * base;

SElemType * top;

intstacksize;

}SqStack;

/*函数原型说明*/

Status InitStack(SqStack&S); //创建一个空栈S

Status Push(SqStack&S,SElemType&a); //插入新元素a

Status Pop(SqStack&S,SElemType&a); //删除栈顶元素,a返回其值

Status StackEmpty(SqStack S); //检查是否空栈

Status MazePath(int maze[12][12],SqStack&S, PosType start, PosType end); //找通路

void Initmaze(int maze[12][12],intx,int y); //初始化迷宫

void printmaze(int maze[12][12],intx,int y); //显示迷宫

Status Pass(int maze[12][12],PosTypeCurPos); //判断当前位置是否可通

void Markfoot(int maze[12][12], PosTypeCurPos); //标记当前位置不可通

PosTypeNextPos(PosTy peCurPos, intDir); //进入下一位置

void printpath(int maze[12][12],SqStackS,intx,inty,PosTypestart,PosType end); //显示通路

/*主函数*/

void main (void)

{

PosTypestart,end;

int t=0;

SqStack S;

int maze[12][12];

do{

if(t!=0)

printf("\n");

for(int i=0;i<20;i++)

{

printf("* ");

}

if(t==0)

{

printf("\n*\t欢迎来到迷宫世界\t * \n");

printf("*\t 1.设置迷宫\t\t * \n");

}

else

{

printf("\n* 请继续选择:\t\t\t * \n");

printf("*\t 1.设置迷宫\t\t * \n");

}

printf("*\t 2.设置迷宫路径\t\t * \n");

printf("*\t 3.输出迷宫通路路径\t * \n");

printf("*\t 4.结束\t\t\t *\n");

t++;

for(int j=0;j<20;j++)

{

printf("* ");

}

printf("\n");

int s;

printf("请选择:");

scanf("%d",&s);

intaa;intx,y;

switch(s)

{

case 1://1.初始化迷宫

aa=1;

printf("迷宫设置:请输入\n"); //设置迷宫大小

do

{

printf("行X(x<10)=");

scanf("%d",&x);

printf("列Y(y<10)=");

scanf("%d",&y);

if(x<1 || x>10||y<1 || y>10)

{

printf("输入错误!\n");

}

}while(x<1 || x>10||y<1 || y>10);

Initmaze(maze,x,y); //初始化迷宫

printmaze(maze,x,y); //显示所创建的迷宫

break;

case 2://寻找迷宫路径

if(aa==1)

{

aa=2; //设置入口和出口

do{

printf("输入入口行坐标:");scanf("%d",&start.row);

if(start.row>x)

printf("输入错误!\n");

}while(start.row>x);

do{

printf("输入入口列坐标:");scanf("%d",&start.line);

if(start.line>y)

printf("输入错误!\n");

}while(start.line>y);

do{

printf("输入出口行坐标:");scanf("%d",&end.row);

if(end.row>x)

printf("输入错误!\n");

}while(end.row>x);

do{

printf("输入出口列坐标:");scanf("%d",&end.line);

if(end.line>y)

printf("输入错误!\n");

}while(end.line>y);

}

else

printf("请先初始化迷宫!\n");

printf("\n所设置入口坐标为(%d,%d),出口坐标为(%d,%d).\n",start.row,start.line,end.row,end.line);

break;

case 3://输出此迷宫通路路径

if(aa==2)

{

aa=3;

if(MazePath(maze,S,start,end)) //若有通路,显示通路

printpath(maze,S,x,y,start,end);

else

printf("\n抱歉,找不到通路!\n\n");

相关文档
最新文档