迷宫程序简单实现

原创 2006年05月27日 21:51:00

//这个程序是将一个迷宫的程序打印出来,具体的操作我会在下面的程序中具体的
//给出来,其中分为两一个小的程序,一个是这个文件,另一个是一个以head.cpp文件
//为main函数的文件,好了,程序开始了
#include "iostream.h"
#include "malloc.h"
#define ERROR 0
#define OK 1
#define NULL 0
typedef int ElemType ;
typedef int status;
#define A 4 //定义一个数组的长度(6*6的数组)
int array[A][A];
typedef struct LNode{
  int length;
  int width;
  int direct;//这个是为了判断方向的。其中0代表向上,1代表向右,2代表向下,3代表向左
  struct LNode *next;
}map,*mapth;
mapth coutmap=0;//全局变量
status push(mapth &L,mapth p)
{//将一个元素推带堆栈中
 if(L==NULL)
 {L=(mapth)malloc(sizeof(map));
 L->length=0;}
 mapth q;
 q=(mapth)malloc(sizeof(map));
 q->direct=p->direct;
 q->length=p->length;
 q->next=p->next;
 q->width=p->width;
 q->next=L->next;
 L->next=q;
 L->length++;
 return OK;
}
status pull(mapth &L,mapth &q)
{//这个函数的功能是将一个线性表拉出来一个元素,并且用e返回,在开始的时候还可以对文件
 //判断一下
 if((L==0)||(L->next==0))
 return ERROR;
 else if(L->length==1)
 {
  q=L->next;
  L->next=0;
  L->length--;
  return OK;
 }
 else
 {
 q=L->next;
 L->next=q->next;L->length--;
 return OK;
 }
}
status empty(int length,int width)
{//判断是否越界,0代表越界,1代表没有
 if(length>=A||width>=A||length<0||width<0)
  return ERROR;
 else if((array[length][width]!=0)) return ERROR;
 else return OK;
}
status coutnode(mapth &L,mapth &first)
{//在执行的时候判断一下,成功就返回1,不成功就返回0
 if((first->length==(A-1))&&(first->width==(A-1)))
 {
  while(L&&(L->next!=0))
  {
  pull(L,first);push(coutmap,first);
   }
  return OK;
 }
 else return ERROR;
}
status del(mapth &L,mapth &first)
{
 if(!L||L->next==0) return ERROR;
 first->direct++;
 if(first->direct==4) first->direct=0;
 if((L->next->direct==1&&first->direct==3)||(L->next->direct==3&&first->direct==1)||(L->next->direct==0&&first->direct==2)||(L->next->direct==2&&first->direct==0))
 first->direct++;
 if(first->direct==4) first->direct=0;
 if(L->next->direct==first->direct)
 {
  pull(L,first);
  first->direct++;
  if(first->direct==4) first->direct=0;
  if(!L||L->next==0)
   return ERROR;
 }
 return OK;
}
status migong(mapth &coutmap)
{
 
 int i,j;
 cout<<"please input "<<A*A<<" number !"<<endl;
 for(i=0;i<A;i++)
  for(j=0;j<A;j++)
   cin>>array[i][j];
  cout<<"The computer is begin to find the end! please waite for a few minute!"<<endl;
 mapth L=0;
 L=(mapth)malloc(sizeof(map));
 L->next=0;
 L->length=0;
 L->width=0;
 mapth first;
 first=(mapth)malloc(sizeof(map));
 mapth second;
 second=(mapth)malloc(sizeof(map));
 first->length=0;
 first->width=0;
 first->direct=0;//方向为向上,以下的东西都是循环
 first->next=0;
 second=first;
 push(L,first);
 first=(mapth)malloc(sizeof(map));
 first->direct=second->direct;
 first->length=second->direct;
 first->next=second->next;
 first->width=second->width;
 free(second);
 while((first->length<(A-1))||(first->width<(A-1)))//当L不是空栈的时候,就一直循环
 {
  if(first->direct==0)
  {first->width--;
   if(empty(first->length,first->width)) //当没有越界的时候执行
   {
    push(L,first);
    if(coutnode(L,first)) return 0;
   }
   else
   {first->width++;
    if(!del(L,first)) return ERROR;
   }
  }
 if(first->direct==1)
 {
  first->length++;
  if(empty(first->length,first->width)) //当没有越界的时候执行
  {
  push(L,first);
  if(coutnode(L,first)) return 0;
  }
  else
  { first->length--;
   if(!del(L,first)) return ERROR;
  }
 }
 
 if(first->direct==2)
 {
  first->width++;
  if(empty(first->length,first->width)) //当没有越界的时候执行
  {
   push(L,first);
   if(coutnode(L,first)) return 0;
  }
  else
  { first->width--;
   if(!del(L,first)) return ERROR;
  }
 }
 if(first->direct==3)
 {
  first->length--;
 if(empty(first->length,first->width)) //当没有越界的时候执行
 {
  push(L,first);
  if(coutnode(L,first)) return 0;
 }
 else
 {//当方向是向右的时候就有点不对了,应该做相应的修改
  first->length++;
  if(!del(L,first)) return ERROR;
 }
}
}
while(L&&(L->next!=0))
{
 pull(L,first);push(coutmap,first);
}
return OK;
}
int main()

 migong(coutmap);
 mapth first=0;
 while(coutmap&&(coutmap->next!=0))
{
 pull(coutmap,first);
 cout<<"A["<<first->length<<"]["<<first->width<<"]"<<endl;
}

 return 0;
}

VCL 中的一个内存泄漏 Bug

在valedit.pas中,TValueListStrings类没有实现虚拟的Destroy方法,它实现了虚拟的Clear方法, 但是它的父类TStringList的Destroy中并不通过调用Cle...
  • xuting
  • xuting
  • 2003-02-17 11:18:00
  • 564

C语言实现迷宫求解问题(详细思路+附源代码)

二、数据结构 1) 建立一个二维数组表示迷宫的路径(0表示通道,1表示墙壁); 2) 创建一个栈,用来存储“当前路径”,即“在搜索过程中某一时刻所在图中某个方块位置”。 1) 创建一个Int类型的二维...
  • rl529014
  • rl529014
  • 2016-01-03 16:59:59
  • 27192

C++<em>迷宫程序代码</em>

C++编写的白色光点<em>迷宫程序</em>,可以直接复制<em>代码</em>运行。如果需要同类型<em>程序</em>可以留言,用空我就回复
  • 2018年04月22日 00:00

C语言大作业<em>简单迷宫程序</em>

评论共有1条 baidu_26313509 2015-06-21 09:00:41 能够直接运行得到的一个...一个走<em>迷宫的程序</em> C语言实现迷宫求解问题(详细思路+附<em>源代码</em>) ...
  • 2018年04月18日 00:00

使用C++编写简单的迷宫游戏

迷宫游戏就是玩家在地图中移动,移动至终点则游戏结束。自己用文本文档手打了个小地图,0表示空白,1表示墙,文件名随意,我改成了map.MapData。然后程序里定义一个全局变量char Map[MapL...
  • qq_18352005
  • qq_18352005
  • 2018-02-28 14:17:12
  • 68

一个简单的迷宫算法

迷宫问题的求解是一个典型的问题,那仫如何找到迷宫的出口?在遇到死胡同的时候如何返回?如何防止走重复的路程?这就是我们要解决的问题了.      一.设置迷宫          要打印一个简单的迷宫,我...
  • qq_34328833
  • qq_34328833
  • 2016-09-11 08:32:40
  • 6517

C语言简单迷宫问题,深搜,通俗易懂。

简单迷宫深搜-C表示新人,大神勿喷,欢迎给出建议。在网上搜了一些深搜,发现看不懂,就把自己写的贴出来,还是比较好理解。自己出的小迷宫题:给出迷宫,求出共多少方法,和最小最大路程。0表示可走,1表示墙,...
  • mutao1127877836
  • mutao1127877836
  • 2017-12-01 11:34:51
  • 802

C++<em>迷宫程序代码</em>经典完全包学包会

<em>迷宫代码</em>用C++写的,<em>简单</em>易懂方便仿写... <em>迷宫代码</em>用C++写的,<em>简单</em>易懂方便仿写 综合评分:0 收藏评论...C++ 指针 实现<em>迷宫</em> <em>程序代码</em> C++ 指针 实现<em>迷宫</em> <em>程序代码</em> 立...
  • 2018年04月18日 00:00

简易迷宫游戏

人控制方向: #include using namespace std; #define n 8 int * createMaze(){ int i,j; int * a; a=new int...
  • u011700203
  • u011700203
  • 2014-05-04 23:51:29
  • 901

回溯算法实现<em>迷宫</em> 模块化实现,思路清晰,<em>简单</em>易懂

评论共有0条 C语言实现<em>迷宫</em>求解问题(详细思路+附<em>源代码</em>) 数据结构 <em>迷宫</em>求解...4000万 <em>程序</em>员的必选 600万 绿色安全资源 现在开通 立省522元 或者 购买C币...
  • 2018年04月16日 00:00
收藏助手
不良信息举报
您举报文章:迷宫程序简单实现
举报原因:
原因补充:

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