|
|
我在运行“求解最短路径”是发现,解出的路径明显不是最短的,走了些弯路。我将程序做了少许修改,终于解出最短路径。改动如下:
findpt.h
int trytile(int x,int y,TREE father);改为int trytile(int x,int y,TREE father,int k);
findpt.cpp
int findpt::judge(int x,int y)
{int distance;
distance=abs(end_x-x)+abs(end_y-y);
return distance;
}改为
int findpt::judge(int x,int y)
{int distance;
distance=abs(end_x-x)+abs(end_y-y);
distance=distance*10;
return distance;
}
child =trytile(x, y-1,root); //尝试向北 移动
child&=trytile(x, y+1,root); //尝试向南 移动
child&=trytile(x-1,y, root); //尝试向西 移动
child&=trytile(x+1,y, root); //尝试向东 移动
child&=trytile(x+1,y-1,root); //尝试向东北移动
child&=trytile(x+1,y+1,root); //尝试向东南移动
child&=trytile(x-1,y+1,root); //尝试向西南移动
child&=trytile(x-1,y-1,root); //尝试向西北移动
改为
child =trytile(x, y-1,root,10); //尝试向北 移动
child&=trytile(x, y+1,root,10); //尝试向南 移动
child&=trytile(x-1,y, root,10); //尝试向西 移动
child&=trytile(x+1,y, root,10); //尝试向东 移动
child&=trytile(x+1,y-1,root,14); //尝试向东北移动
child&=trytile(x+1,y+1,root,14); //尝试向东南移动
child&=trytile(x-1,y+1,root,14); //尝试向西南移动
child&=trytile(x-1,y-1,root,14); //尝试向西北移动
这样做会使搜索更准确,但是搜索的速度会减慢。唐老师一定是为了让程序运行得更快而使用了改动前的方法。这样改动的原因请参考gameres有关介绍A*的文章。 |
|