我一直在尝试编写一个Java类来解决使用某种堆叠和递归,答案存储在网格(二维数组)的n皇后问题,但我'在n = 8时达到递归堆栈溢出的死墙(最大递归深度达到2298) 所以我一直在想,是否有一些方法可以通过执行一些复杂的事情来绕过这个死亡,比如在java中分配更多的堆空间如果可能的话?),或者使用多线程(点我出去教程/例)......还是请你就如何优化代码... 在此先感谢优化N皇后代码,以避免堆栈溢出
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(){ /** * Lines of code */ resourdre(); }
我把它public void resoudre(){ do{ /** * Lines of code */ } while(true); }
无论如何,我同意一些下面的意见,程序结构更简单,但我选择了这种方式来缓解gui操作以后... – user145296 2009-07-26 15:44:13