ある種のスタッキングと再帰を使用して n クイーン問題を解決する Java クラスを作成しようとしましたが、答えはグリッド (2 次元配列) に格納されますが、再帰のスタック オーバーフローであるデッドウォールにぶつかりました。 n = 8で(最大再帰深度に達しました2298)だから、Javaでより多くのヒープスペースを割り当てる(可能であれば?)またはマルチスレッドを使用する(指摘してくださいチュートリアル/例へ)...またはコードを最適化する方法についてアドバイスをお願いします...よろしくお願いします
public void resoudre(){
this.gridPile.push(copyGrid(grid));
try{
int row = gridPile.size()-1;
if(gridPile.size()==0)row = 0;
chooseGridSpace(this.grid, locateFirstAvailable(grid, row));
if(gridPile.size() == this.taille){
gridSolutions.push(copyGrid(grid));
grid = gridPile.pop();
boolean erronous = true;
while(erronous){
try{
MakeNextUnavailable(grid, gridPile.size());
erronous = false;
}
catch(UnavailabilityException r1){
try{
grid = gridPile.pop();
}
catch(java.util.EmptyStackException r2){
return;
}
}
}
}
}
catch(InvalidPositionException e1){
this.grid = gridPile.pop();
boolean error = true;
while(error){
try{
MakeNextUnavailable(grid, gridPile.size());
error = false;
}
catch(UnavailabilityException er){
try{
this.grid = gridPile.pop();
}
catch(java.util.EmptyStackException err){
return;
}
}
}
}
catch(java.lang.ArrayIndexOutOfBoundsException e2){
return;
}
this.resoudre();
}
private static void chooseGridSpace(int[][] grid, Position a){
grid[a.getLigne()][a.getColonne()] = 1;
fillNotAvailable(grid, a);
}