資源簡介
利用A*算法解決九宮格重排問題,可以當游戲玩~~
代碼片段和文件信息
#include?
#include??
#include?
#include
#include
#include?
#include
using?namespace?std;
string?target=“123456780“;
string?original=“123456708“;
class?Node?
{
public:
string?state;
int?r;//1234代表上下左右
int?gh;//代價;g代表執行的步數,h代表當前狀態和目標狀態不同數字的個數。
Node?*family;//回溯用
int?geth();
int?getvalue();
Node()
{
family=NULL;
state=“102345687“;//如果初始化為NULL, if?(*(pMatrix+i)!=*(target+i))會報錯
???????//?h=?geth();
r=0;
g=0;
h=0;
};
};
int?Node::geth()//////////獲得節點a的代價h
{
int?k=0;
for(int?i=0;i<9;++i)
{
for(int?j=0;j<9;++j)
{
if(state[i]==‘0‘)
continue;
if?(state[i]==target[j])
{
k+=abs(j/3-i/3)+abs(j%3-i%3);//////////////////////abs不要忘了,不然會相當慢
}
}
}
return?k;
}
/*
int?Node::geth()//////////獲得節點a的代價h
{
int?k=0;
for(int?i=0;i<9;++i)
{
if?(state[i]!=target[i])
{
k++;
}
}
return?k;
}
*/
int?Node::ge
評論
共有 條評論