#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<time.h>
#define STACK_INIT_SIZE 1000
#define STACKINCREMENT 10
#define OK 1
#define OVERFLOW 0
#define ERROR 0
//typedef int SElemType;
typedef struct SElemType{
int x;int y;
};
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int 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;
}
void 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;
}
SElemType Pop(SqStack &S,SElemType &e){
//if(S.top==S.base) return ERROR;
e=*--S.top;
return e;
}
SElemType GetTop(SqStack S,SElemType &e){
e=*(S.top-1);
return e;
}
int StackEmpty(SqStack &S)
{//若栈S为空栈,则返回OK,否则返回ERROR
if(S.base==S.top)
return OK;
else
return ERROR;
}
int main()
{
int m;
SqStack S;
InitStack(S);
printf("请输入迷宫的大小(m*m)");
scanf("%d",&m);
//数组的形式表示八个方向
int move[8][2]={{0,1},{1,1},{1,0},
{1,-1},{0,-1},{-1,-1},{-1, 0},{-1, 1}};
//用结构体表示位置
struct position
{
int x,y;
};
//用于记录和输出迷宫探路中相关符号,包括1 .
char maze[20][20];
//用栈来存储探路过程中的数据
int i,x,y,ok;
SElemType p;
//二维数组的第0行、第m+1行、第0列、第m+1列元素全
//置成“1”,表示迷宫的边界;第1行第1列元素和第m行第m列
//元素置成“0”,表示迷宫的入口和出口;其余元素值用随机
//函数产生。
srand(time(0));
for(x=1;x<=m;x++)
for(y=1;y<=m;y++)
maze[x][y]=48+rand()%2;
maze[1][1]='0';maze[m][m]='0';
for(x=0;x<=m+1;x++)
{
maze[x][0]='1';maze[x][m+1]='1';
}
for(y=0;y<=m+1;y++)
{
maze[0][y]='1';maze[m+1][y]='1';
}
p.x=1;p.y=1;
Push(S,p);
maze[1][1]='.';
printf("迷宫初始为(m*m)/n");
for(x=1;x<=m;x++)
{
printf("/n");
for(y=1;y<=m;y++)
printf("%c ",maze[x][y]);
}
printf("/n");
//开始探路
do{
GetTop(S,p);
ok=0;i=0;
while((ok==0)&&(i<8))
{
x=p.x+move[i][0];
y=p.y+move[i][1];
if(maze[x][y]=='0')
{
p.x=x;p.y=y;
Push(S,p);
maze[x][y]='.';
ok=1;
}
i++;
}
if(i==8)
{
maze[p.x][p.y]='*';
Pop(S,p);
}
}while((!StackEmpty(S))&&((p.x!=m)||(p.y!=m)));
//输出探路结果
if(StackEmpty(S)) printf("没有路径/n");
else printf("有路径/n");
//输出探路迷宫留下的踪迹
for(x=1;x<=m;x++)
{
printf("/n");
for(y=1;y<=m;y++)
printf("%c ",maze[x][y]);
}
printf("/n");
system("pause");
}
分享到:
相关推荐
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以 三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个位置(行号和列号),d 表示走到下一 位置的方向(对于迷宫中...
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对信任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
数据结构迷宫代码,数据结构(C语言版),迷宫的C++语言实现.在数据结构的非空有限集中,按照一定事先布置的顺序实现.线性表是最常用的数据结构,不断的更新,不断的变化...粉色范围沃尔费威尔俄文热辐射大范围而...
数据结构中的C语言版迷宫代码。 已调试运行过。 绝对真实。
数据结构迷宫必备,菜鸟大虾都可用,很有用的
//------------ 栈的顺序存储实现 ------------------------------typedef struct...{ int row; int col;}PosType;typedef struct...{ int step; //当前位置在路径上的"序号" PosType seat;...
迷宫啊迷宫啊迷宫啊迷宫啊数据结构 迷宫源代码
新手写的简单的严蔚敏数据结构的迷宫算法,是对原版的补充,花了不少时间,虽然很简单,但是这个过程学了不少东西,拿来分享,有不足的多多指教!
java设计的迷宫,棵运行,找资源的朋友千万不要错过,好东西啊,快来了喜爱啊
东北大学数据结构实验中迷宫问题的C++语言代码
山东大学 数据结构实验 迷宫 堆栈应用 数据结构课程设计
数据结构迷宫问题用C++源代码实现,对刚开始学习数据结构的人有帮助
数据结构 课程设计 迷宫求解代码。使用C/C++编写。
此程序是课程设计的源代码,用于数据结构课程设计的源代码,为迷宫代码
将文件解压,然后将各个.h文件和.cpp文件添加到项目中便可执行
迷宫问题-数据结构-源代码
c语言数据结构迷宫算法 有详细的注释 动态堆栈的详细
数据结构上机作业,C语言,迷宫源代码,编译通过可运行
数据结构 迷宫程序 mfc 实现多功能动态的迷宫操作
数据结构 迷宫求解问题 数据结构课程设计源代码 txt格式