数据结构之迷宫求解 使用栈

// Maze.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "iostream"

using namespace std;

const int M=10;
const int N=10;
int maze[M][N]=
{
	1,1,1,1,1,1,1,1,1,1,
	1,0,1,0,0,1,1,0,0,1,
	1,0,0,1,0,0,0,0,0,1,
	1,1,0,0,1,0,0,1,0,1,
	1,0,0,1,0,0,0,0,1,1,
	1,1,0,0,0,0,0,0,0,1,
	1,0,0,0,0,0,1,0,1,1,
	1,1,1,1,0,1,0,0,0,1,
	1,0,0,0,0,0,0,0,0,1,
	1,1,1,1,1,1,1,1,1,1
}; // 定义迷宫

int next_xy[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; // 用于计算下一次搜索位置的计算量

typedef struct
{
	int x;
	int y;
}PosType; // 用于记录在迷宫中的位置

typedef struct
{
	int ord;
	PosType seat;
	int di; // 记录方向
}SElemType;  // 栈的元素类型

typedef struct node   
{  
	SElemType data;  
	struct node *link;  
}LinkedNode;  

int Init(LinkedNode *&top);  
int Push(LinkedNode *&top, SElemType e);  
int Pop(LinkedNode *&top,SElemType &e);  
int GetTop(LinkedNode *&top, SElemType &e);  
int StackEmpty(LinkedNode *&top);

int Pass(PosType e);
int FootPrint(PosType e);
PosType NextPos(PosType &e,int di);
int MarkPrint(PosType e);
int MazePath(int MAZE[M][N],PosType start,PosType end,LinkedNode *&stack);

// 定义一个全局的栈
LinkedNode *stack;

int _tmain(int argc, _TCHAR* argv[])
{
	PosType start,end;
	start.x=1;
	start.y=1; // 起点
	end.x=8;
	end.y=8;   // 终点
	// 初始化栈
	Init(stack);
	// 打印当前迷宫
	for (int i=0;ilink=NULL;  
	return 1;  
}  

int Push(LinkedNode *&top, SElemType e)  
{  
	node *p=(LinkedNode*)malloc(sizeof(LinkedNode));  
	if (!p)  
	{  
		return -1;  
	}  
	p->data=e;
	p->link=top->link;  
	top->link=p; // 在链表的头部插入新的结点,入栈  
	return 1;  
}  

int Pop(LinkedNode *&top,SElemType &e)  
{  
	if (top->link==NULL)  
	{  
		return -1;  
	}  
	e=top->link->data;  
	node *p=top->link;  
	top->link=top->link->link;  
	free(p);  
	return 1;  
}  

int GetTop(LinkedNode *&top, SElemType &e)  
{  
	if (top->link==NULL)  
	{  
		return -1;  
	}  
	e=top->link->data;
	return 1;  
}

// 判断栈是否为空
int StackEmpty(LinkedNode *&top)
{
	if (top->link==NULL)
	{
		return 1;
	}
	return 0;
}



你可能感兴趣的:(c++)