/**
* Created by aaron on 16-3-16.
*
* • F = G+H
* • G=从起点A沿着已生成的路径到一个给定方格的移动开销。
* • H=从给定方格到目的方格的估计移动开销。这种方式常叫做试探,有点困惑人吧。其实之所以叫做试探法是因为这只是一个猜测。在找到路径之前我们实际上并不知道实际的距离,因为任何东西都有可能出现在半路上(墙啊,水啊什么的)。本文中给出了一种计算H值的方法,网上还有很多其他文章介绍的不同方法。
*
*/
public class RobotTest {
static Piece start;
static Piece end;
static Piece[][] pieces;
public static Piece[][] init(){
Piece[][] pieces = new Piece[5][7];
start = pieces[2][1] = new Piece(2,1,PieceType.START);
end = pieces[2][5] = new Piece(2,5,PieceType.END);
pieces[2][1].setG(0);
pieces[2][1].setH(calcH(pieces[2][1],pieces[2][5]));
pieces[2][1].setF(pieces[2][1].getH());
for(int i=0;i<pieces.length;i++){
for(int j=0;j<pieces[i].length;j++){
if(i == 2 && j == 1){
}else if(i == 2 && j == 5){
}else if(j == 3 && (i==1||i==2||i==3)){
pieces[i][j] = new Piece(i,j,PieceType.WALL);
}else{
pieces[i][j] = new Piece(i,j,PieceType.EMPTY);
}
}
}
return pieces;
}
public static void test(Piece[][] pieces){
// System.out.println(calcH(pieces[3][0],pieces[2][5]));
// System.out.println(calcH(pieces[3][2],pieces[2][5]));
// System.out.println(calcH(pieces[1][2],pieces[2][5]));
System.out.println(calcG(pieces[0][1],pieces[0][2]));
System.out.println(calcG(pieces[0][1],pieces[1][1]));
System.out.println(calcG(pieces[0][1],pieces[1][2]));
// System.out.println(calcG(pieces[0][1],pieces[0][3]));
// System.out.println(calcG(pieces[0][1],pieces[2][1]));
// System.out.println(calcG(pieces[0][1],pieces[2][2]));
}
public static int calcF(Piece start,Piece end){
return calcG(start,end)+calcH(start,end);
}
public static void main(String[] args) {
pieces = init();
display(pieces);
//test(pieces);
process(pieces);
}
public static void process(Piece[][] pieces){
Piece start = pieces[2][1];
Piece end = pieces[2][5];
List<Piece> openList = new ArrayList<Piece>(Arrays.asList(start));
List<Piece> closeList = new ArrayList<Piece>();
process(pieces,openList,closeList,
迷宫算法
最新推荐文章于 2023-01-10 15:48:24 发布