我试着通过调用曼哈顿距离来解决一个15字谜游戏,并采取可能的移动的最小值。
public int resolution() throws InterruptedException {
//Map<Integer, Integer> disman= new TreeMap<Integer, Integer>();
int n = this.posVide;
ArrayList<Case> g= this.grille;
System.out.println(g);
int before=-1;
while (!estResolue(g)){
ArrayList<Integer> c=mouvementPossible(n);
int minPos = 1000000;
int minDist = 10000000;
for (Integer i : c){
int posFi=this.grille.get(i).getPos();
int distanceMan= Math.abs( pos2D(i)[0] - pos2D(posFi)[0]) + Math.abs( pos2D(i)[1] - pos2D(posFi)[1] );
if (minDist>distanceMan && distanceMan!=0 && before!=i){
minPos=i;
minDist=distanceMan;
}
//disman.put(i, distanceMan);
}
Collections.swap(g, n, minPos);
before=minPos;
n=minPos;
System.out.println(g);
Thread.sleep(1000);
}
return -1;}
格栅是一个案例列表,案例有一个属性位置谁是他们的最终位置!arraylist中每个案例的位置都是当前位置。我有一个方法来计算可能的移动谁工作良好。但我不明白为什么当我启动methode时我会进入一个无限循环。。。
【案例{pos=14}、案例{pos=10}、案例{pos=9}、案例{pos=6}、案例{pos=3}、案例{pos=5}、案例{pos=11}、案例{pos=4}、案例{pos 13}、案例{pos 7}、案例{pos 16}、案例{pos 8}、案例{pos 12}、案例{pos 0}、案例{pos 15}、案例{pos 2}】
【案例{pos=14}、案例{pos=9}、案例{pos=10}、案例{pos=6}、案例{pos=3}、案例{pos=5}、案例{pos=11}、案例{pos=4}、案例{pos 13}、案例{pos 7}、案例{pos 16}、案例{pos 8}、案例{pos 12}、案例{pos 0}、案例{pos 15}、案例{pos 2}】
【案例{pos=14}、案例{pos=10}、案例{pos=9}、案例{pos=6}、案例{pos=3}、案例{pos=5}、案例{pos=11}、案例{pos=4}、案例{pos 13}、案例{pos 7}、案例{pos 16}、案例{pos 8}、案例{pos 12}、案例{pos 0}、案例{pos 15}、案例{pos 2}】
【案例{pos=14}、案例{pos=9}、案例{pos=10}、案例{pos=6}、案例{pos=3}、案例{pos=5}、案例{pos=11}、案例{pos=4}、案例{pos 13}、案例{pos 7}、案例{pos 16}、案例{pos 8}、案例{pos 12}、案例{pos 0}、案例{pos 15}、案例{pos 2}】
暂无答案!
目前还没有任何答案,快来回答吧!