何らかのスタッキングと再帰を使用してnクイーン問題を解決するためにJavaクラスを作成しようとしていますが、答えはグリッド(2次元配列) (最大再帰の深さは2298に達しました) Javaでより多くのヒープスペースを割り当てるのと同じような複雑な作業をすることによって、この死んだものを回避する方法があるのだろうかと疑問に思っています?可能な場合)またはマルチスレッドを使用して(チュートリアル/例に私を指摘)...またはコードを最適化する方法についてアドバイスをしてください... Javaでは、事前に おかげスタックオーバーフローを避けるためにN Queensのコードを最適化する
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);
}
する必要があります私は、私はとにかくそれ
public void resoudre(){ do{ /** * Lines of code */ } while(true); }
作られたものは、再帰構造 ので、代わりのpublic void resoudre(){ /** * Lines of code */ resourdre(); }
を避けるためである、いくつかの簡単な最適化を行ってきた、私はいくつかに同意プログラムの構造が簡単であるという下の意見のうち、私は後でGUI操作を簡単にするためにこの方法を選択しました... – user145296