资源简介
具体功能如下:
建立一个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
- 上一篇:C语言编写的猜数游戏
- 下一篇:定义一个数组类
评论
共有 条评论