#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
using namespace std;
int mazeMap[100][100];
typedef struct
{
int x,y;
}PosType;
typedef struct
{
PosType seat;
int di;
}SElemType,MazeType;
typedef struct{
MazeType *base;
MazeType *top;
int stacksize;
}MazeStack;
MazeStack S;
typedef int Status;
Status InitStack(MazeStack &S);
Status StackEmpty(MazeStack &S);
Status Push(MazeStack &S, MazeType &e);
Status GetTop(MazeStack s,MazeType &e);
Status Pop(MazeStack &S, MazeType &e); Status MazePath(PosType start, PosType end);
Status Pass(PosType &pos);
void FootPrint(PosType pos);
PosType NextPos(PosType curPos, int &i);
void MakePrint(PosType pos);
int Long,wide;
void interface()
{
cout<<"**请选择**********"<<endl;
cout<<"* 1查询 *"<<endl;
cout<<"* 2退出 *"<<endl;
cout<<"******************"<<endl;
}
int main()
{
while(1)
{
//system("cls");
interface();
int cho;
cin>>cho;
if(cho==1)
{
memset(mazeMap,0,sizeof(mazeMap));
cout<<"请输入迷宫大小"<<endl;
cin>>Long>>wide;
for(int i = 0;i <= wide;i++)
{
mazeMap[0][i] = 1;
mazeMap[Long+1][i] = 1;
}
for(int i = 0;i <= Long;i++)
{
mazeMap[i][0] = 1;
mazeMap[i][wide+1] = 1;
}
int num;
cout<<"请输入障碍点个数"<<endl;
cin>>num;
int x,y;
cout<<"请输入障碍点坐标"<<endl;
{
for(int i=0;i<num;i++)
{
cin>>x>>y;
mazeMap[x][y]=1;
}
}
PosType Start, End;
Start.x = 1;
Start.y = 1;
End.x = Long;
End.y = wide;
system("cls");
cout<< "起始点为(1,1)"<<endl;
cout<< "出口为("<<Long<<","<<wide<<")"<<endl;
cout<<"迷宫为:"<<endl;
for(int i=0;i<=Long+1;i++)
{
for(int j=0;j<=wide+1;j++)
cout << mazeMap[i][j];
cout << endl;
}
if(MazePath(Start, End)){
cout << "走通迷宫" << endl;
int pri[1000][2];
int temp=0;
while(!StackEmpty(S)){
MazeType tem;
pri[temp][0]=S.top->seat.x;
pri[temp++][1]=S.top->seat.y;
Pop(S,tem);
}
cout<<"(1,1)";
for(int i=temp-1;i>0;i--)
{
cout<<"->("<<pri[i][0]<<","<<pri[i][1]<<")";
}
cout<<endl;
}
else
cout << "走不通迷宫" << endl; }
else if(cho==2)
{
break;
}
else{
system("cls");
cout<<"输入错误,请重新输入"<<endl;
}
}
return 0;
}
Status InitStack(MazeStack &S)
{
S.base = (MazeType *)malloc(STACK_INIT_SIZE*sizeof(MazeType));
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(MazeStack &S, MazeType &e)
{
if(S.top - S.base >= S.stacksize)
{
S.base = (MazeType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(MazeType));
if(S.base) exit (OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
Status Pop(MazeStack &S, SElemType &e)
{
if(S.top == S.base) return ERROR;
e = * -- S.top;
return OK;
}
Status StackEmpty(MazeStack &S)
{
if(S.base == S.top)
return OK;
return ERROR;
}
Status GetTop(MazeStack S,MazeType &e)
{
if(S.top == S.base) return ERROR;
e = *(S.top-1);
return OK;
} Status MazePath(PosType Start, PosType End)
{
PosType curpos;
MazeType e;
InitStack(S);
curpos = Start;
do
{
if(Pass(curpos)==1)
{
FootPrint(curpos);
e.seat = curpos;
e.di = 1;
Push(S, e);
if(curpos.x == End.x && curpos.y == End.y)
{
return TRUE;
}
curpos = NextPos(curpos, e.di);
}
else
{
if(!StackEmpty(S))
{
Pop(S, e);
while(e.di == 4 && !StackEmpty(S))
{
MakePrint(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;
}
Status Pass(PosType &pos)
{
if(mazeMap[pos.x][pos.y] == 1)
{
return 0;
}
else{
return 1;
}
}
void FootPrint(PosType pos)
{
mazeMap[pos.x][pos.y] = -1;
}
PosType NextPos(PosType curPos, int &i)
{
switch(i)
{
case 1:
++curPos.x;
if(mazeMap[curPos.x][curPos.y] !=-1)
break;
--curPos.x;
case 2:
i = 2;
++curPos.y;
if(mazeMap[curPos.x][curPos.y] != -1)
break;
--curPos.y;
case 3:
i = 3;
--curPos.x;
if(mazeMap[curPos.x][curPos.y] != -1)
break;
++curPos.x;
case 4:
i = 4;
--curPos.y;
if(mazeMap[curPos.x][curPos.y] == -1)
{
++curPos.y;
mazeMap[curPos.x][curPos.y] =1;
}
break;
} return curPos;
}
void MakePrint(PosType pos)
{
mazeMap[pos.x][pos.y] = 1;
}

  

迷宫求解_数据结构c语言版的更多相关文章

  1. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  2. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  3. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  4. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  5. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  6. 数据结构(c语言版)文摘

    第一章  绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...

  7. 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器

    在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...

  8. 深入浅出数据结构C语言版(5)——链表的操作

    上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...

  9. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

随机推荐

  1. Git学习总结(8)——Git和SVN之间的基本区别

    GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...

  2. [terry笔记]Oracle SQL 优化之sql tuning advisor (STA)

    前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综 ...

  3. 洛谷——P2822 组合数问题

    https://www.luogu.org/problem/show?pid=2822 题目描述 组合数C_n^mC​n​m​​表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三 ...

  4. 洛谷 P3420 [POI2005]SKA-Piggy Banks

    P3420 [POI2005]SKA-Piggy Banks 题目描述 Byteazar the Dragon has NN piggy banks. Each piggy bank can eith ...

  5. iOS 开发仿网易云音乐歌词海报

    使用网易云音乐也是一个巧合,我之前一直使用QQ音乐听歌,前几天下 app 手机内存告急.于是就把QQ音乐给卸载掉了,正好晚上朋友圈里有一个朋友用网易云音乐分享了一首歌曲,于是我也就尝试下载了网易云音乐 ...

  6. fastjson 的简单使用

    public static void main(String[] args) { /*普通对象与json相互转换*/ User u = new User("miquan", &qu ...

  7. 面试-MySQL

    1  事务的特性 事务具有四个特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持续性(Durability).这四个特性也简称ACID性. (1)原 ...

  8. OpenGL ES 3.0 Graphics Pipeline

    一:OpenGL ES 3.0 Graphics Pipeline  渲染管道如下图 1.Vertex Buffer/Arrays Objects的数据由应用程序传进来 2.由上图可以看到Textur ...

  9. [jzoj 4722] [NOIP2016提高A组模拟8.21] 跳楼机 解题报告 (spfa+同余)

    题目链接: http://172.16.0.132/senior/#main/show/4722 题目: DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧.Srwudi的家是一幢h层的摩天 ...

  10. _itoa进制转换

    #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> void main() { int ...