资源简介
本科生计算机相关专业 人工智能课程 A*算法解决迷宫问题C++代码 详细注释,易懂
代码片段和文件信息
#include
#include
#include
using namespace std;
struct direction //存储可以扩展的方向的数据结构
{
public:
bool uprightdownleft;
bool closed; //用来记录是否是closed集中
direction(){};
direction(int aint bint cint d)
{
up=a;
right=b;
down=c;
left=d;
closed=0;
}
};
class point
{
public:
int xygvalue;
point* father;
point(){value=INT_MAX;};
point(int aint b)
{
x=a;y=b;
value=INT_MAX;
};
bool operator < (point &b)
{
return value };
void f(point a);
};
void point::f(point a) //计算f值,使用形参为了可以使终点可自由改变
{
value=g+abs(a.x-x)+abs(a.y-y);
}
void main()
{
direction rule[5][5]; //为了便于理解就浪费点空间吧……
queue result; //即closed集,也就是结果路径。
list open;
//规则集//////////////////////////////////////////////////////////////
rule[1][1]=direction(1000);
rule[1][2]=direction(1010);
rule[1][3]=direction(0110);
rule[1][4]=direction(0100);
rule[2][1]=direction(1100);
rule[2][2]=direction(1110);
rule[2][3]=direction(1011);
rule[2][4]=direction(0111);
rule[3][1]=direction(1101);
rule[3][2]=direction(1011);
rule[3][3]=direction(1110);
rule[3][4]=direction(0011);
rule[4][1]=direction(1001);
rule[4][2]=direction(1010);
rule[4][3]=direction(1011);
rule[4][4]=direction(0010);
////////////////////////////////////////////////////////////////////////
point temp;
direction d_temp;
point s(11);
point terminal(44);
s.g=0;
s.father=NULL;
s.f(terminal);
open.push_back(s);
while(!(open.empty()|(temp.x==terminal.x&&temp.y==terminal.y)))
{
open.sort();
temp=open.front();
result.push(open.front());
rule[open.front().x][open.front().y].closed=1;//表明此结点已加入closed集
d_temp=rule[temp.x][temp.y];
open.pop_front();
if(d_temp.up)
{
point t(temp.xtemp.y+1);
t.g=temp.g+1;
t.f(terminal);
if(!rule[t.x][t.y].closed) //判断结点是否在closed集中
{
open.push_front(t);
}
}
if(d_temp.right)
{
point t(temp.x+1temp.y);
t.g=temp.g+1;
t.f(terminal);
if(!rule[t.x][t.y].closed)
{
open.push_front(t);
}
}
if(d_temp.down)
{
point t(temp.xtemp.y-1);
t.g=temp.g+1;
t.f(terminal);
if(!rule[t.x][t.y].closed)
{
open.push_front(t);
}
}
if(d_temp.left)
{
point t(temp.x-1temp.y);
t.g=temp.g+1;
t.f(terminal);
if(!rule[t.x][t.y].closed)
{
open.push_front(t);
}
}
}
if(open.empty()) cout<<“没有路径!“< else
{
cout<<“最短路径:“< while(!result.empty())
{
cout<<“(“<“;
result.pop();
}
cout<<“\b\b“<<“ “< }
getchar();
getchar();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2977 2018-11-23 15:06 maze.cpp
- 上一篇:svd分解的C语言实现
- 下一篇:c语言运动会分数统计
相关资源
- 迷宫求解算法数据结构c语言
- 迷宫的生成与自动寻路
- 数据结构——迷宫
- c语言迷宫算法
- 老鼠走迷宫数据结构课程设计
- c语言回溯法走迷宫的源码
- 数据结构之迷宫求解完整代码(C语言
- 栈实现迷宫
- 数据结构 C语言 迷宫问题求解 栈
- A*算法解迷宫
- m×n的长方阵迷宫问题完美求解
- 求解迷宫最短路径算法
- C语言数据结构用队列求解迷宫最短路
- 随机迷宫生成迷宫自动寻路软件VS20
- 左手法则c语言程序
- 使用C++实现迷宫游戏
- C语言实现迷宫问题
- 数据结构——迷宫问题
- 迷宫问题数据结构 C++编写
- 迷宫问题的C++算法实现
- 迷宫求解 C++ 完整。。。。。
- 数据结构中用栈实现迷宫问题的c++代
- 利用回溯法解决迷宫问题
- 数据结构 迷宫问题 C++ 栈方法
- 迷宫问题,C语言写的
- C++ 回溯法求解罗密欧与朱丽叶的迷宫
- 利用队列找出迷宫的最优解
- IEEE电脑鼠走迷宫(完整参赛代码)
- 纯c语言迷宫源码.zip
- c语言支持自己创建迷宫,并求解最短
评论
共有 条评论