資源簡介
以A*算法作為本程序的算法,利用f=g+h;其中g(shù)代表每個結(jié)點的深度,h代表該結(jié)點與目標結(jié)點相差的位置。利用open,close表作為輔助。把每個同一層次的結(jié)點放進open表中,再選取最小代價放入close表中。close表中的結(jié)點即為最優(yōu)路徑中的一個結(jié)點。直到找出目標的結(jié)點,然后打印。
① 判斷OPEN表是否為空的函數(shù)
② 求OPEN表中估價函數(shù)值最小的結(jié)點的函數(shù)
③ 判斷初始狀態(tài)是否可到達目標狀態(tài)的函數(shù)
④ 求估價函數(shù)值p(n)-曼哈頓距離
⑤ 產(chǎn)生新狀態(tài)的函數(shù),共四個,空格上/下/左/右移動
⑥ 判重函數(shù),判斷新節(jié)點在OPEN,CLOSE表中是否已經(jīng)有了
⑦
代碼片段和文件信息
#include
#include
#include
#include
typedef?struct?Node
{
int?p;????????//曼哈頓距離
int?g;????????//代價
int?f;????????//估價函數(shù)值
int?flag;?????//標志結(jié)點是否被訪問過,1為訪問過,0為沒訪問過
int?num_state[9];//當前狀態(tài)
struct?Node?*father;?//指向父親結(jié)點
}eight_node*eight_number;
////定義open和close表結(jié)構(gòu)體
typedef?struct?Node1
{
???eight_node?data;
???struct?Node1?*next;
}LNode*linkNode;
int?destination_num[]?={123456780};??//目標狀態(tài)
//添加新的結(jié)點到open表close表中
void?add_node(linkNode?&opeight_number?newNode)
{
linkNode?p;
int?i;
p=(linkNode)malloc(sizeof(LNode));
p->data.f=newNode->f;
p->data.father=newNode->father;
p->data.flag=newNode->flag;
p->data.g=newNode->g;
for(i=0;i<9;i++)
???p->data.num_state[i]=newNode->num_state[i];
p->data.p=newNod
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????15319??2008-12-21?13:00??Eight_Puzzle.cpp
?????文件??????32256??2009-05-29?21:16??AI_課程設(shè)計報告.doc
-----------?---------??----------?-----??----
????????????????47575????????????????????2
評論
共有 條評論