好久没搞这些东西了...想了十分钟才勉强回忆起来...
写了 3个钟头...好累啊...
4种算法是DFS,BFS,Heuristic DFS, Heuristic BFS (A*)
用了两张障碍表
![](/icons/10270dou.gif)
![](/icons/10270yi.gif)
![](/icons/10270de.gif)
char Block[SY][SX]=
{{1,1,1,1,1,1,1,1,1,1,1 },
{1,0,1,0,1,0,0,0,0,0,1 },
{1,0,1,0,0,0,1,0,1,1,1 },
{1,0,0,0,1,0,1,0,0,0,1 },
{1,0,1,1,0,0,1,0,0,1,1 },
{1,0,1,0,1,1,0,1,0,0,1 },
{1,0,0,0,0,0,0,0,1,0,1 },
{1,0,1,0,1,0,1,0,1,0,1 },
{1,0,0,1,0,0,1,0,1,0,1 },
{1,1,1,1,1,1,1,1,1,1,1 }};
第 2张是删掉
![](/icons/10270yi.gif)
![](/icons/10270de.gif)
char Block[SY][SX]=
{{1,1,1,1,1,1,1,1,1,1,1 },
{1,0,1,0,1,0,0,0,0,0,1 },
{1,0,1,0,0,0,1,0,1,1,1 },
{1,0,0,0,0,0,1,0,0,0,1 },
{1,0,0,1,0,0,1,0,0,1,1 },
{1,0,1,0,0,1,0,1,0,0,1 },
{1,0,0,0,0,0,0,0,1,0,1 },
{1,0,1,0,0,0,1,0,1,0,1 },
{1,0,0,1,0,0,1,0,0,0,1 },
{1,1,1,1,1,1,1,1,1,1,1 }};
结果:
尝试节点数 合法节点数 步数
深度优先 416/133 110/43 19/25
广度优先 190/188 48/49 19/15
深度+启发 283/39 82/22 19/19
广度+启发 189/185 48/49 19/15
所以可以看出深度+启发是最好
![](/icons/10270de.gif)
![](/icons/10270dou.gif)
![](/icons/10270dou2.gif)
![](/icons/10270yi.gif)
![](/icons/10270dou2.gif)
附:dfs+heu
![](/icons/10270de.gif)
![](/icons/10270chengxu.gif)
![](/icons/10270dou.gif)
![](/icons/10270jiajia.gif)
#
![](/icons/10270include.gif)
#
![](/icons/10270include.gif)
#
![](/icons/10270include.gif)
#
![](/icons/10270define.gif)
#
![](/icons/10270define.gif)
![](/icons/10270int.gif)
![](/icons/10270de.gif)
![](/icons/10270int.gif)
/*char Block[SY][SX]= //障碍表
{{ 1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,1,0,1,0,0,0,0,0,1 },
{ 1,0,1,0,0,0,1,0,1,1,1 },
{ 1,0,0,0,0,0,1,0,0,0,1 },
{ 1,0,0,1,0,0,1,0,0,1,1 },
{ 1,0,1,0,0,1,0,1,0,0,1 },
{ 1,0,0,0,0,0,0,0,1,0,1 },
{ 1,0,1,0,0,0,1,0,1,0,1 },
{ 1,0,0,1,0,0,1,0,0,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1 }};*/
char Block[SY][SX]= //障碍表
{{ 1,1,1,1,1,1,1,1,1,1,1 },
{ 1,0,1,0,1,0,0,0,0,0,1 },
{ 1,0,1,0,0,0,1,0,1,1,1 },
{ 1,0,0,0,1,0,1,0,0,0,1 },
{ 1,0,1,1,0,0,1,0,0,1,1 },
{ 1,0,1,0,1,1,0,1,0,0,1 },
{ 1,0,0,0,0,0,0,0,1,0,1 },
{ 1,0,1,0,1,0,1,0,1,0,1 },
{ 1,0,0,1,0,0,1,0,1,0,1 },
{ 1,1,1,1,1,1,1,1,1,1,1 }};
![](/icons/10270int.gif)
char Table[SY][SX]; //已到过标记
![](/icons/10270int.gif)
![](/icons/10270int.gif)
![](/icons/10270yi.gif)
![](/icons/10270de.gif)
![](/icons/10270int.gif)
char Act[1000]; //每
![](/icons/10270yi.gif)
![](/icons/10270de.gif)
![](/icons/10270dou.gif)
![](/icons/10270dou.gif)
![](/icons/10270int.gif)
![](/icons/10270de.gif)
![](/icons/10270int.gif)
![](/icons/10270int.gif)
void Test( );
void Back( );
![](/icons/10270int.gif)
![](/icons/10270int.gif)
void
![](/icons/10270main.gif)
{
mem
![](/icons/10270set.gif)
![](/icons/10270sizeof.gif)
mem
![](/icons/10270set.gif)
![](/icons/10270sizeof.gif)
Table[y][x]=1; //做已到过标记
while (!AllComplete) //是否全部搜索完
{
Level
![](/icons/10270jiajia.gif)
![](/icons/10270yi.gif)
while (!LevelComplete)
{
Act[Level]=GetNextAct( ); //改变移动方向
![](/icons/10270if.gif)
sum1
![](/icons/10270jiajia.gif)
![](/icons/10270if.gif)
{
sum2
![](/icons/10270jiajia.gif)
Test( ); //测试是否已到目标
LevelComplete=1; //该步搜索完成
}
![](/icons/10270else.gif)
{
![](/icons/10270if.gif)
Back( ); //回上
![](/icons/10270yi.gif)
![](/icons/10270if.gif)
LevelComplete=AllComplete=1; //退出
}
}
}
}
void Test( )
{
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270dd.gif)
{
for (
![](/icons/10270int.gif)
![](/icons/10270jiajia.gif)
cout<<(
![](/icons/10270int.gif)
cout<<endl;
cout<<Level+1<<\" \"<<sum1<<\" \"<<sum2<<endl;
LevelComplete=AllComplete=1; //完成搜索
}
}
![](/icons/10270int.gif)
{
![](/icons/10270int.gif)
![](/icons/10270de.gif)
![](/icons/10270int.gif)
![](/icons/10270de.gif)
![](/icons/10270if.gif)
![](/icons/10270cuowu.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
x=tx;
y=ty; //移动
Table[y][x]=1; //做已到过标记
![](/icons/10270return.gif)
}
void Back( )
{
x-=dx[Act[Level-1]-1];
y-=dy[Act[Level-1]-1]; //退回原来
![](/icons/10270de.gif)
Table[y][x]=0; //清除已到过标记
Act[Level]=0; //清除方向
Level--; //回上
![](/icons/10270yi.gif)
}
![](/icons/10270int.gif)
![](/icons/10270yi.gif)
![](/icons/10270dou2.gif)
![](/icons/10270yi.gif)
![](/icons/10270chengxu.gif)
![](/icons/10270dou.gif)
//仔细看!
{
![](/icons/10270int.gif)
![](/icons/10270int.gif)
![](/icons/10270int.gif)
![](/icons/10270int.gif)
for (
![](/icons/10270int.gif)
![](/icons/10270jiajia.gif)
dis[i]=abs(x+dx[i]-TargetX)+abs(y+dy[i]-TargetY);
for (i=0;i<4;i
![](/icons/10270jiajia.gif)
![](/icons/10270if.gif)
{
order[0]=i+1;
t=dis[i];
}
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
order[1]=-1;
for (i=0;i<4;i
![](/icons/10270jiajia.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
{
order[1]=i+1;
![](/icons/10270break.gif)
}
![](/icons/10270if.gif)
{
for (i=0;i<4;i
![](/icons/10270jiajia.gif)
![](/icons/10270if.gif)
{
order[tt]=i+1;
tt
![](/icons/10270jiajia.gif)
}
}
![](/icons/10270else.gif)
{
for (i=0;i<4;i
![](/icons/10270jiajia.gif)
![](/icons/10270if.gif)
{
order[tt-1]=i+1;
tt
![](/icons/10270jiajia.gif)
}
}
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
![](/icons/10270if.gif)
![](/icons/10270dd.gif)
![](/icons/10270return.gif)
}
最新评论