迷宫算法

/**
 * 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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值