这个题就是一个简单的深搜
不多说直接贴代码
#include<stdio.h>
#include<stdlib.h>
#define Max 100
#define MAX 10000
int Map[Max][Max];
int x1,x2,y1,y2,m,n,x3,y3,l,f;
int jr[][2]={
-1,0,1,0,0,-1,0,1};//用于上下左右移动
struct SeqStack /* 顺序栈类型定义 */
{
int t; /* 指示栈顶位置 */
DataType s[MAX]; /*MAX表示栈的最大容量*/
};
注意:此处的DataType可以是int,char,float也可以是结构体。
迷宫问题用到的是结构体
typedef struct
{
int x; /* 行坐标 */
int y; /* 列坐标 */
} DataType;
主要的操作
PSeqStack createEmptyStack_seq(void) //初始化栈
int isEmptyStack_seq(PSeqStack pastack) //判断栈是否为空
void Push_seq(PSeqStack pastack, DataType x) //入栈
void Pop_seq(PSeqStack pastack) //出栈
DataType Top_seq(PSeqStack pastack)
创建空栈
typedef struct SeqStack *PSeqStack;
PSeqStack pastack;
PSeqStack createEmptyStack_seq(void)
{
PSeqStack pastack;
pastack = (PSeqStack)malloc(sizeof(struct SeqStack));
if(pastack ==NULL)
printf("malloc error!! \n");
else pastack->t;
return pastack;
};
判断栈是否为空
int isEmptyStack_seq(PSeqStack pastack)
{
return pastack->t==-1;
};
入栈
void Push_seq(PSeqStack pastack,DataType x)
{
if(pastack->t>MAX)
printf("error 2!\n");
else
{
pastack->t++;
pastack->s[pastack->t]=x;
}
};
出栈
void Pop_seq(PSeqStack pastack)
{
if(!isEmptyStack_seq(pastack))
pastack->t--;
};
取栈顶元素
DataType Top_seq(PSeqStack pastack)
{
return (pastack->s[pastack->t]);
};
迷宫行走部分
int Maze_Path(int x,int y)//形参初始坐标
{
int i,o;
DataType x5;
x5.x=x;
x5.y=y;
if(Map[x][y]==0) {
Push_seq(pastack,x5);//如果为0,则入栈,并标记为2
Map[x][y]=2;}
if(x==x2&&y==y2)//如果与目标位置一致则返回1,并用全局变量储存目标位置在栈的位置,并让全局f为1;
{
l=pastack->t;f=1;return 1;}
for(o=0;o<4;o++)
{
x3=x+jr[o][0];
y3=y+jr[o][1];//上下左右移动
if(x3>=0&&x3<m&&y3>=0&&y3<n