gpt4 book ai didi

java - 如何在不使用 System.exit(0) 的情况下停止回溯?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:30 24 4
gpt4 key购买 nike

static void LasVegas(int []tablero, int f, int ultimaReina){


HashSet<Integer> enterosUsados = new HashSet<Integer>();


if (ultimaReina!=-1) enterosUsados.add(ultimaReina);
if ((ultimaReina-1) >=0){enterosUsados.add(ultimaReina-1);}
if ((ultimaReina+1 != tablero.length) && (ultimaReina!=-1)){enterosUsados.add(ultimaReina+1);}
// if(ultimaReina+1!=tablero.length){enterosUsados.add(ultimaReina+1);}

Random random = new Random();
int posReina;

if (f==tablero.length){
printBoard(tablero);
stop=System.currentTimeMillis();
System.out.println(stop-start);
System.exit(0);
return;
}

do {

do{
posReina= Math.abs(random.nextInt())%tablero.length;
}
while(enterosUsados.add(posReina)==false);


tablero[f]=posReina;

if (check(tablero, f)){
LasVegas(tablero, f+1, posReina);
}



} while (enterosUsados.size()<tablero.length);

}

public static void main(String[] args) {

// testChiCuadrado(410,30);

int [] tablero = new int[8];
Arrays.fill(tablero, -1);

start = System.currentTimeMillis();
LasVegas(tablero, 0, -1);


}

static boolean check (int [] array, int f){

for (int i=0; i<f; i++){

if (array[i]==array[f]) return false;

if( Math.abs(array[f]-array[i])== Math.abs(f-i)) return false;


} return true;



}


static void printBoard(int [] tablero) {

char [] linea = new char[tablero.length];
Arrays.fill(linea, '*');
for (int i=0;i<tablero.length;i++){

linea[tablero[i]]='D';
System.out.println(new String(linea));
linea[tablero[i]]='*';

}

}

我正在使用拉斯维加斯算法在棋盘上生成随机皇后位置,我想通过多次运行对其进行计时,但我正在使用 System.exit(0)在找到解决方案时停止回溯,如果我不在那里停止,我的算法会给出其他解决方案,这是我不想要的。

这里:

       if (f==tablero.length){
printBoard(tablero);
stop=System.currentTimeMillis();
System.out.println(stop-start);
System.exit(0);
return;
}

如何更改它并使算法在没有 System.exit(0) 的情况下停止,以便我可以在循环中多次调用它?

最佳答案

LasVegas 的返回类型更改为 boolean。删除对 System.exit() 的调用并将紧随其后的 return; 语句更改为 return true;。将递归调用更改为:

if (LasVegas(tablero, f+1, posReina)) return true;

关于java - 如何在不使用 System.exit(0) 的情况下停止回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com