• 大小: 29KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: 栈与队列  

资源简介

具体功能如下: 建立一个m*n的矩阵迷宫并至少有一个入口和出口,0和1分别表示迷宫中的通路和障碍; 探索从迷宫入口到出口有无通路,若有,则计算出通路的路径,通路以(I,j,d)三元素表示,i、j分别表示迷宫中的坐标,d表示走到下一坐标的方向。若没有,则给出相应信息; 最后以矩阵形式输出迷宫和通路。

资源截图

代码片段和文件信息

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            // 
//                                                 寻路问题                                                                   // 
//                                  Created by 王永欣     All rights reserved                                                 // 
//                                       Last  revised in 2017/5/19 14:14                                                     //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
using namespace std;
class OpenList;
class CloseList;
class Map;
class ReFindWay;
class Data
{
private:
int X;//X坐标 
int Y;//Y坐标 
int Status;//状态 1为不通 0为通 2为通但不是最佳路径 3为无视该地形 
bool ISINOPEN;//是否在Open表中 
bool ISINCLOSE;//是否在Close表中 
int FCOST;//F值 
int GCOST;//G值(实际花费) 
int HCOST;//H值(估计花费,曼哈顿距离) 
int Level;//第几步 
Data *next;//open表的下指针 
Data *before;//open表的前指针 
Data *next2;//close表的下指针 
Data *before2;//close表的前指针 
Data *father;//它的上一节点 
Data *newnext;//ReFindWay next
public:
friend class OpenList;
friend class CloseList;
friend class Map;
friend class ReFindWay;
Data()
{
Status=1;
ISINCLOSE=false;
ISINOPEN=false;
GCOST=0;
HCOST=0;
FCOST=0;
Level=0;
next=NULL;
before=NULL;
next2=NULL;
before2=NULL;
father=NULL;
newnext=NULL;
}
void printf()//输出单个数据的信息 
{
cout<<“(“< if(ISINOPEN)
{
cout<<“In Open   “;
}
if(ISINCLOSE)
{
cout<<“In Close“;
}
cout< }

};
class CloseList//close表 
{
private:
Data *first;
Data *find;
int length;
public:
friend class Map;
CloseList()
{
first=NULL;
find=NULL;
length=0;
}
void Add(Data *&p)//将p添加进close表 
{
if(length==0)
{
first=p;
length++;
find=first;
p->ISINCLOSE=true;
}
else
{
find->next2=p;
p->before2=find;
p->ISINCLOSE=true;
length++;
find=find->next2;
}
}
void Delete(bool decide)//删除最近添加的数据 decide决定该点是不是2 
{
if(length==0)
{
cout<<“CloseList is Empty“< }
else
{
if(length==1)
{
first->ISINCLOSE=false;
if(decide)
{
first->Status=2;
}
first=NULL;
find=NULL;
length--;
}
else
{
if(decide)
{
find->Status=2;
}
find->ISINCLOSE=f

评论

共有 条评论

相关资源