数据结构学习记录-迷宫设计

原创 2012年03月24日 22:34:56

迷宫程序设计是第三个实验,思想是不停的试探,然后标记判断出路的过程

一般自己习惯把头文件全部放在一个文件里名为t11.h

 

#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"malloc.h"
#include"stdlib.h"  //atoi(),exit();
#include"io.h"      //eof()
#include"math.h"


#define  TRUE  1
#define  FALSE  0
#define  OK   1
#define  ERROR 0

typedef int Status;
typedef int Boolean;

 

然后就是自己定义的数据类型了  定义在头文件m1.h里

 

#define INIT_STACK_SIZE 40
#define STACK_ADD 10
typedef struct
{
 int road;
 int foot;
 int direct;
}migong,*mi;

typedef struct
{
 mi elem;      //  定义能够接受迷宫结构体指针的变量
 int size;     //  记录迷宫初始化大小
}ji,*hui;

typedef struct
{
 int i;           // 行
 int j;           // 列
}cun;

typedef struct     //  把位子放入栈中 线性表操作
{
 cun *top;
 cun *bottom;
 int stacksize;
} Sqstack;

再就是自己定义的实现函数了 我自己定义为migong.cpp

 

void initstack(Sqstack &L)            //  初始化栈操作
{
 L.bottom=(cun*)malloc(INIT_STACK_SIZE*sizeof(cun));
 if(!L.bottom)
 {
  printf("内存分配失败!!");
  exit(-1);
 }
 L.top=L.bottom;
    L.stacksize=INIT_STACK_SIZE;
}

Status push(Sqstack &L,int q,int p)          // 压入位置 q表示行,p表示列
{
 if(L.top-L.bottom >= L.stacksize)
 { L.bottom=(cun*)realloc(L.bottom,(L.stacksize+STACK_ADD)*sizeof(cun));
 if(!L.bottom)
 {
  printf("内存分配失败!!");
  exit(-1);
 }
 L.top=L.bottom+L.stacksize;
 L.stacksize+=STACK_ADD;
 }
 L.top->i=q;
 (L.top++)->j=p;

 return OK;
}

Status pop(Sqstack &L,int &k,int &l)    //   弹出 将栈顶的元素带回
{
 if(L.top == L.bottom)
   return ERROR;  
   k=(--L.top)->i;            //  这点自己犯的问题  不能--L.top->i  这样就表示值减1  没意义,出错
   l=L.top->j;
   return OK;
}

Status emptystack(Sqstack L)         //  判断栈为空
{
 if(L.top == L.bottom)
  return OK;
 else
  return ERROR;
}

void init(ji &L)                               //   初始化数据
{
 printf("输入迷宫的大小:");
 scanf("%d",&L.size);
 L.size+=2;
 L.elem=(mi)malloc(L.size*L.size*sizeof(migong));
 if(!L.elem)
 {
  printf("分配内存失败!!");
  exit(1);
 }
 printf("初始化成功!\n");
}

void print(ji L)
{
  int m;
     printf("打印输出!!\n\n");
     m=L.size*L.size;
 for(int i=0;i<m;i++)
 {
        if((i+1)%L.size != 1 && (i+1)%L.size != 0 && i>L.size-1 && i<m-L.size+1)
   printf("%-4d",(L.elem+i)->road);
  
  if((i+1)%L.size == 0 && i>L.size && i<m-L.size-1)
   
   printf("\n\n");
 }
 printf("\n");
}

void shuru(ji &L)
{
 int m=L.size*L.size;
 for(int i=0;i<m;i++)
 {
  (L.elem+i)->direct=1;
        (L.elem+i)->foot=0;
  if((i+1)%L.size == 1 || (i+1)%L.size == 0 || i<=L.size-1 || i>=m-L.size+1)
   (L.elem+i)->road=0;
        else
   (L.elem+i)->road=1;    //  表示通路,初始化全部为
 }
    print(L);
    printf("设置墙:\n");
 printf("输入迷宫的行和列:");
 int k,j;
 char ch='y';
 while('y' == ch || 'Y' == ch)
 {
         scanf("%d%d",&k,&j);
   (L.elem+k*L.size+j)->road=0;
   printf("是否继续(Y/y):");
   getchar();
   ch=getchar();
 }
 print(L);
}


void shituan(ji &L,int z,int x,int &m,int &n)   //  判断方向
{  

 switch((L.elem+L.size*z+x)->direct)
 {
 case 1:m=z,n=x+1;break;
 case 2:m=z+1,n=x;break;
 case 3:m=z,n=x-1;break;
 case 4:m=z-1,n=x;break;
 }
}

void chuli(ji &L,Sqstack &T)
{
 int m,n,i=1,j=1;
 printf("开始执行!!");
 while(m!=L.size-2 || n!=L.size-2)   //   循环条件是不是最后一个位置
 {
      shituan(L,i,j,m,n);
   (L.elem+L.size*i+j)->direct++;
        if((L.elem+L.size*m+n)->road != 0 && (L.elem+L.size*m+n)->foot != 1)   // 该位置不是墙也不是已经走过的路径
  {
   push(T,i,j);                           //  压入位置
   (L.elem+L.size*i+j)->foot=1;           //  留下足迹
   (L.elem+L.size*i+j)->road=2;           //  将通路为置为2,表示路径
            i=m;
   j=n;
  }
       else if((L.elem+L.size*i+j)->direct == 5)   //  4个方向都没有路了
  {
     if(emptystack(T))                      //  当前栈里面是否有元素
     {
      printf("无通路!!!~~~~~~~~~~~~~\n试探路径为:\n");
                  print(L);
      exit(1);                   // 退出程序
     }
   (L.elem+L.size*i+j)->road=-1;     //  将走过的路,不通的留下记号,标记为-1
            (L.elem+L.size*i+j)->foot=1;      //  留下足迹
  
   pop(T,i,j);           // 不通的路径出栈
   
    }
 
  
 }
 if(m == L.size-2 && n == L.size-2)     // 将最后一个位置为留下2
      (L.elem+L.size*m+n)->road=2;

    print(L);
}

最后就是自己定义的主函数了名为main_5.cpp

 

#include"t11.h"
#include"m1.h"
#include"migong.cpp"


void main()
{
 ji S;
 Sqstack T;
    initstack(T);
 init(S);
 shuru(S);
 chuli(S,T);

}

 

这是自己学数据结构的第三个实验,小弟深知编程不但可以考验一个人的逻辑思维能力,更是对自己毅力的体现,希望自己以后能够变得更出色!留住最真的于2012.03.10  20:18写~~~~~~~~~~~~~~~~~~

.数据结构迷宫问题的文档

1、实验内容 a问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷宫的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 b选做内容 (1)编...
  • lk519186921
  • lk519186921
  • 2012年06月13日 13:55
  • 1191

数据结构例程——迷宫问题(用栈结构)

本文针对数据结构基础系列网络课程(3):栈和队列中第6课时栈的应用2-迷宫问题。例:求出从入口到出口的路径 程序实现:#include #define MaxSize 100 #define M ...
  • sxhelijian
  • sxhelijian
  • 2015年09月15日 11:41
  • 12536

迷宫算法及数据结构分析(by WIzaRD_ssc)

关于迷宫,承载着我们童年中的点滴记忆。当然,那时候总有些迷宫册子,每本还有专门的主题(奥特曼,葫芦娃,铠甲勇士什么的= =)。而且不得不说,真是干一行爱一行,这些出册子的人,把迷宫这个游戏可是上升到了...
  • WIzaRD_ssc
  • WIzaRD_ssc
  • 2015年07月23日 16:55
  • 1594

数据结构实践——迷宫问题之图深度优先遍历解法

本文是针对[数据结构基础系列(7):图]的实践项目。【项目 - 迷宫问题之图深度优先遍历解法】   设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。   (1)建立迷宫对应的图数据结构...
  • sxhelijian
  • sxhelijian
  • 2015年11月08日 15:36
  • 5999

数据结构课程设计——迷宫问题课程设计报告

上学时没学过数据结构和算法,于是现在有机会就自学。下面是我最近在等待进入项目组期间,花了1小时学习了一下迷宫问题。下面是我学习时找到的一篇课程设计的报告,然后自己先看懂,然后又在VC6.0下运行了。 ...
  • aspireone
  • aspireone
  • 2012年07月03日 16:42
  • 6665

迷宫求解 《数据结构——严蔚敏》

  在学《数据结构——严蔚敏》,自己动手写了 迷宫求解 的实现!为了方便,C和C++部分混写了= =!稍稍修改了点地方/****************************************...
  • dly553709938
  • dly553709938
  • 2010年09月26日 00:46
  • 5281

数据结构迷宫问题

一、实验的目的和要求 1、了解栈的特征,以及顺序表在迷宫问题中的应用。 2、掌握顺序栈在迷宫问题如何实现,熟练掌握顺序栈的基本操作。 二、实验的主要内容 问题描述:在迷宫中求从...
  • bingheliushui520
  • bingheliushui520
  • 2014年04月10日 21:27
  • 3199

数据结构学习记录-迷宫设计(最短路径)

本程序主要是采用队列的思想,将4个方向的通路入队,然后依次先去,直到入口结束!!~~~~~~~~~~~~~~   定义头文件t11.h   #include"stdio.h" #includ...
  • wu10045125
  • wu10045125
  • 2012年03月24日 22:37
  • 762

严蔚敏 数据结构 课本中 栈应用 走迷宫 C语言 完整版 源代码和注释 可直接执行

#include #include #include #define STACK_INIT_SIZE 100 #define INCREMENT 10 /* typedef ...
  • daringpig
  • daringpig
  • 2012年06月12日 21:10
  • 9540

【数据结构】走迷宫实现

#pragma once #ifndef _MAZE_H_ #define _MAZE_H_ struct Intersection { int left, forwd, right; /...
  • weixin_34453968
  • weixin_34453968
  • 2016年11月10日 19:33
  • 850
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构学习记录-迷宫设计
举报原因:
原因补充:

(最多只允许输入30个字)