资源简介
有一条河,河的左岸有m个传教士(Missionary)和m个野人(Cannibal),和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。
C语言实现A*算法!
代码片段和文件信息
/*
有一条河,河的左岸有m个传教士(Missionary)和m个野人(Cannibal),和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。
版权yuan_chuan
*/
#include
#include
#define MAXM 10
#define MAXC 5
typedef struct mc_state
{
int m_num;
int c_num;
int boat_state;
int g;
int h;
int f;
struct mc_state *next;
struct mc_state *parent;
}mc_state;
mc_state *open;
mc_state *close;
mc_state boat[8]={{011000NULLNULL}
{021000NULLNULL}
{031000NULLNULL}
{101000NULLNULL}
{111000NULLNULL}
{201000NULLNULL}
{211000NULLNULL}
{301000NULLNULL}
};
/*建立一个新的状态结点*/
mc_state * new_mc_state(void)
{
mc_state *p;
p=(struct mc_state *)malloc(sizeof(struct mc_state));
p->m_num=0;
p->c_num=0;
p->boat_state=1;
p->g=0;
p->h=0;
p->f=0;
p->next=NULL;
p->parent=NULL;
}
/*显示open表close表状态*/
int show(mc_state *p)
{
if (p==NULL)
{
printf(“空表没有元素!“);
}
while (p!=NULL)
{
printf(“( %d %d %d f=%d )\n“p->m_nump->c_nump->boat_statep->f);
p=p->next;
}
}
/*判断是否存在于open或closed表中*/
int exist(mc_state *pmc_state *head)
{
mc_state *q*prior;
q=head;
if (q==NULL)
{
return 0;
}
else
{
while ( q!=NULL)
{
if ( (p->m_num == q->m_num)&&(p->c_num == q->c_num)&&(p->boat_state == q->boat_state))
{
return 1;
}
q=q->next;
}
return 0;
}
}
/*open表添加*/
int add_open(mc_state *p)
{
mc_state *q*r;
q=open;
if (q==NULL)
{
open = p;
}
else
{
if ( p->f <= q->f )
{
p->next = open;
open = p;
}
else
{
r=q;
while (q!=NULL && q->f < p->f)
{
r=q;
q=q->next;
}
q=r->next;
r->next=p;
p->next=q;
}
}
return 1;
}
/*open表删除*/
mc_state * del_open( )
{
mc_state *p;
if (open==NULL)
{
return NULL;
}
else
{
p=open;
open = p ->next;
return p;
}
}
/*close表添加*/
int add_close(mc_state *p)
{
if (close==NULL)
{
close=p;
}
else
{
p->next=close;
close=p;
}
return 1;
}
/*启发函数*/
int h(mc_state *p)
{
return p->m_num+p->c_num-2*p->boat_state;
}
/*判断状态是否合法*/
int is_mc_state(mc_state *p)
{
if ((p->m_num>MAXM)||
(p->m_num<0)||
(p->c_num>MAXC)||
(p->c_num<0))
{
return 0;
}
else
{
if (((p->m_num>=p->c_num)&&
(MAXM - p->m_num >= MAXC - p->c_num)
)||
(p-> m_num==MAXM) ||
- 上一篇:gh0st3.6_vs2012
- 下一篇:sourceinsight全局配置文件
相关资源
- 地铁计费系统C++实现dijkstra算法
- 自动解决智能拼图,A*算法+生成可解
- RSA算法纯C语言代码实现,带测试dem
- DDA算法、中点bresenham算法及bresenham算
- ISODATA算法C语言程序
- MFC实现RSA算法
- 最短路径用Dijkstra算法实现的MFC编程
- VS2008环境下C++实现Dijkstra算法,查找有
- 用C++stl与QT实现的A*算法Demo
- C++实现A*算法十五数码问题
- 八数码问题数字华容道,九宫格深度
- Dijskra算法 floyd算法
- c++数据结构课程设计-校园最短路径采
- 基于A*算法的十五数码程序 C语言版
- 人工智能 A算法 九宫格 启发式搜索
- NCC和SSDA算法的图像匹配实现
- RSA算法加密MFC实现
- C语言实现最短路径规划
- A*算法求解八数码--演示程序MFC
- ISODATA算法
- PCA算法C语言描述
- A*算法用于动态路径规划
- A*算法 A star算法 C语言版
- 启发式搜索算法解决八数码问题(C语
- A*算法vc++源码
- 人工智能 A*算法 八数码问题 C++ 报告
- RSA(C++)代码实现全
- dijkstra算法C++实现
- DAA算法 VC++实现 画线
- RSA算法C语言程序
评论
共有 条评论