Java版A星算法实现步骤
A星算法步骤:1.起点先添加到开启列表中。2.开启列表中有节点的话,取出第一个节点,即最小F值的节点,判断此节点是否是目标点,是则找到了,跳出,根据此节点取得八个方向的节点,求出G,H,F值,判断每个节点在地图中是否能通过,不能通过则加入关闭列表中,跳出判断每个节点是否在关闭列表中,在则跳出,判断每个节点是否在开启列表中,在则更新G值,F值,还更新其父节点;不在则将其添加到开启列表中,计算G值,H值,F值,添加其节点。3.把此节点从开启列表中删除,再添加到关闭列表中。4.把开启列表中按照F值最小的节点进行排序,最小的F值在第一个。5.重复2,3,4步骤,直到目标点在开启列表中,即找到了;目标点不在开启列表中,开启列表为空,即没找到
?
public class Test { public static void main(String[] args){ int[][] map=new int[][]{// 地图数组 {1,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1} }; AStar aStar=new AStar(map, 6, 10); int flag=aStar.search(4, 0, 3, 8); if(flag==-1){ System.out.println("传输数据有误!"); }else if(flag==0){ System.out.println("没找到!"); }else{ for(int x=0;x<6;x++){ for(int y=0;y<10;y++){ if(map[x][y]==1){ System.out.print(" "); }else if(map[x][y]==0){ System.out.print("〓"); }else if(map[x][y]==-1){ System.out.print("※"); } } System.out.println(); } } }}??