大家帮忙完成一下迷宫哈,谢谢了

浪流 浪流 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define RANGE 12
#define STACK_INIT_SIZE 100
typedef int Status;
typedef int bool;
typedef struct
{
int x;
int y;
}PosType;
typedef struct
{
char arr[RANGE][RANGE];
}MazeType; //迷宫类型
typedef struct
{
int ord;
int di;
PosType seat;
}SElemType;/*坐标位置类型*/
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S) /*初始化栈,设栈为空栈*/
{
S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base)
exit(OVERFLOW);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
bool Pass(MazeType *M,PosType pos) /*检查是否为空格*/
{
if(M->arr[pos.x][pos.y]==' ')
return true;
else
return false;
}
void FootPrint(MazeType *M,PosType pos) /*将该位置标记已走*/
{
M->arr[pos.x][pos.y]='*';
}
Status Push(SqStack *S,SElemType e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
return OK;
}
PosType NextPos(PosType pos,int i) /*求当前位置的下一个探索位置*/
{
switch(i)
{
case 1:
pos.y++;
break;
case 2:
pos.x++;
break;
case 3:
pos.y--;
break;
case 4:
pos.x--;
break;
}
return pos;
}
Status StackEmpty(SqStack *S)
{
if (S->top==-1)
return(1); //空栈则返回1
else
return(0);
}
void pop(SqStack *S)
{
if (S->top==-1)
printf("栈下溢出!\n");
else
S->top--;
}
void MarkPrint(MazeType *M,PosType pos) /*将该位置标记为死胡同*/
{
M->arr[pos.x][pos.y]='@';
}
Status MazePath(MazeType *maze,PosType start,PosType end)
{
SqStack S;
SElemType e;
PosType curpos;
int curstep=1;
InitStack(&S);
curpos=start;
e.ord=curstep;e.seat=curpos;e.di=1;
do
{
if(Pass(maze,curpos))
{
FootPrint(maze,curpos);
Push(S,&e);
if(curpos==end)
return true;
curpos=NextPos(curpos,1);
curstep++;
}
else(!StackEmpty(S))
{
Pop(&S,&e);
while(e.seat==4&&!StackEmpty(S))
{
MarkPrint(maze,e.seat);
Pop(&S,&e);
}
if(e.di<4)
{
e.di++;
Push(&S,e);
curpos=NextPos(e.seat,e.di);
}
}
}while(!StackEmpty(S));
return (false);
}

void main()
{
PosType char arr[12][12]={
{'X','X','X','X','X','X','X','X','X','X','X','X'},
{'X','.','.','.','.','.','.','X','.','X','X','X'},
{'X','.','X','.','X','X','.','.','.','.','.','X'},
{'X','.','X','.','X','X','.','X','X','X','.','X'},
{'X','.','X','.','.','.','.','.','X','.','.','X'},
{'X','.','X','X','X','X','X','X','X','X','X','X'},
{'X','.','.','.','X','.','X','.','.','.','.','X'},
{'X','.','X','X','X','.','.','.','X','X','X','X'},
{'X','.','.','.','.','.','X','X','.','.','.','X'},
{'X','X','X','.','X','X','X','X','.','X','.','X'},
{'X','X','X','X','X','X','X','X','.','X','X','X'},
{'X','X','X','X','X','X','X','X','X','X','X','X'},
};
MazePath(

}
...全文

相关推荐

迷宫问题:m×n长方阵表示迷宫

问题描述: 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴ 实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 ⑵ 编写递归形式的算法,求得迷宫中所有可能的通路; ⑶ 以方阵形式输出迷宫及其通路。 [测试数据] 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口 实现提示: 计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

l591492105

迷宫 课程设计

迷宫老鼠的课程设计,软件截图:http://blog.csdn.net/wxg694175346/article/details/8716983 包含以下主要功能: 1.自定义迷宫大小 2.使用图的深度遍历随机生成迷宫 3.用户使用鼠标绘制自定义迷宫 4.单步求解迷宫 5.一键求解迷宫 6.声音特效

请叫我汪海

C语言迷宫程序代码自动生成迷宫、自动输出路径

C语言迷宫程序代码 具有自动生成迷宫、自动输出路径的功能

MFMAL

C语言完成迷宫问题

c语言完成迷宫问题,输入一个入口和出口找出一条路径

lyd10427023

迷宫 c语言迷宫问题

[问题描述] 以一个mXn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 [基本要求] 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫问题的非递归算法。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的位置,d表示走到下一个坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3,)(3,1,2)……

zou320320320
评论 14
收藏 已收藏
分享
返回顶部
浪流
C语言 70,039 成员 243,237 内容