迷宫求解(数据结构)

原创 2011年01月11日 21:40:00

#include"stdio.h"
#include"malloc.h"
#define MAX 10
#define L 10
#define C 10

int sum[L][C];
typedef struct
{
 int i;
    int j;
}postype;

typedef struct
 {
 int ort;
 postype seat;
 int di;
 }selemtype;
typedef struct
{
 selemtype *base;
    selemtype *top;
    int sizemax;
 
}stack;

 int initstack(stack *st)
 {
  st->base=(selemtype *)malloc(MAX*sizeof(selemtype));
  if(!st->base) return 0;
  st->top=st->base ;
  st->sizemax=MAX;
    return 1;
 }
int empty(stack *st)
{
 if(st->top-st->base>=st->sizemax)
      return 0;
   else if(st->base==st->top)
     return 1;
   return 3;
}
int push(stack *st,selemtype *e)
{
 if(empty(st)==0)
 {
  st->base =(selemtype *)realloc(st->base,(st->sizemax+3)*sizeof(selemtype));
     if(!st->base) return 0;
  st->sizemax +=3;
 }
 *(st->top)=*e;
 st->top++;

   return 1;
   
}
int pop(stack *st,selemtype *e)
{
 if(empty(st)==1)
  return 0;
  *e=*(st->top-1);
  st->top--;
  return 1;

}
 void print(stack *outst)
 {
   selemtype post1;
   stack outst1;
   initstack(&outst1);
   while(true)
   {
    if(pop(outst,&post1)==1)
     push(&outst1,&post1);
 else break;
   }

   while(true)
   {
    if(pop(&outst1,&post1)==1)
    printf("%d,%d,%d,%d/n",post1.ort,post1.seat.i,post1.seat.j,post1.di);
    else break;
   }

 }

 void initsum()
 {
  int i=0,j=0;
  for(i=0;i<L;i++)
   for(j=0;j<C;j++)
    sum[i][j]=0;
  for(j=0,i=0;j<10;j++) sum[i][j]=1;
     for(i=9,j=0;j<10;j++) sum[i][j]=1;
     for(j=0,i=0;i<10;i++) sum[i][j]=1;
  for(j=9,i=0;i<10;i++) sum[i][j]=1;
     
   for(i=1,j=3;i<3;i++)sum[i][j]=1;
   for(i=1,j=7;i<3;i++) sum[i][j]=1;
   sum[4][2]=1;sum[4][3]=1;sum[4][4]=1;
   sum[3][5]=1;sum[3][6]=1;sum[5][4]=1;
   sum[6][2]=1;sum[6][6]=1;
   for(i=7,j=2;j<5;j++) sum[i][j]=1;
      sum[7][6]=1;sum[7][7]=1;sum[8][1]=1;
   sum[1][0]=0;sum[8][9]=8;

 }
void main()
{
   int di=0,i=1,j=0,n;
   int a=1,b=0;
   stack outst;
 
   selemtype post;
   post.ort =0;
   initsum();
   initstack(&outst);
  while(true)
  {
   a=i;b=j;
   di=0;
   if(sum[i][j]==8){ printf("按下路径走,你能成功出来了:/n");print(&outst);break;}
    while(di<4)
    {     a=i;b=j;
    if(di==0) b=j+1;
    if(di==1) a=i+1;
    if((di==2)&&(j!=0))b=j-1;
    if(di==3) a=i-1;
    if((sum[a][b]==1)||(sum[a][b]==2)||(sum[a][b]==3))
    {
                  di++;
    }
      else
      { 
    sum[i][j]=2;
          post.di=di;
          post.ort++;
          post.seat.i=i;
          post.seat.j=j;
          push(&outst,&post);
                if(di==0) j++;
             if(di==1) i++;
             if(di==2) j--;
             if(di==3) i--;
                 break;
      }
    }

 
   if(di>=4)
   {
    sum[i][j]=3;
       n=pop(&outst,&post);
    if(n==1)
    {
      i=post.seat.i ;
      j=post.seat.j;
    }
    else
    {
     printf("迷宫无法出去,是个死宫!");
     break;
    }

    
   }
  }

}

 

 

 

 

 

 

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

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

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

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

【数据结构】算法3.3 迷宫求解

#include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEAS...
  • Vit_rose
  • Vit_rose
  • 2016年10月10日 19:52
  • 930

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

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

(数据结构)栈_迷宫求解(严蔚敏P50) _模仿

一般方法: #include"ds.h" #define MAX_COLUM 10 //迷宫最大列数 #define MAX_ROW 10 //迷宫最大行数 #define MAX_NUM 10...
  • u013080459
  • u013080459
  • 2014年01月12日 11:32
  • 1256

【数据结构】算法3.3 迷宫求解

#include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEAS...
  • Vit_rose
  • Vit_rose
  • 2016年10月10日 19:52
  • 930

【数据结构实验】编制一个程序求解迷宫通路

#include #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #...
  • qq_32353771
  • qq_32353771
  • 2015年11月10日 14:18
  • 2141

数据结构--用栈求解迷宫问题(非最优解)

数据结构第四版p79页迷宫问题我觉得存在BUG,下图盗用贺老师就会的QAQ,也希望贺老师能看到帮忙解答一下啦。 BUG:  程序从起始点(1,1)开始寻找路径,在当前点进行判断其上下左右是否存在可走点...
  • huangyong000
  • huangyong000
  • 2016年05月09日 18:57
  • 3553

数据结构——迷宫求解

效果如下: 源代码如下: #include #include #include #define M 100 #define ERROR 0  #define OK 1 ...
  • tianse12
  • tianse12
  • 2015年07月28日 15:37
  • 651

C++栈实现数据结构中的迷宫求解

利用顺序栈实现数据结构中的迷宫求解问题 首先初始化一个二维数组vector>,将障碍物标记为-1,为走过的点标记为0,走过的点标记为1 从入口地址开始,依次按上下左右四个方向寻找是否有可以通行的点,如...
  • longjingwen12345
  • longjingwen12345
  • 2016年11月25日 12:47
  • 1296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:迷宫求解(数据结构)
举报原因:
原因补充:

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