Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图找出如何使这个n queens方法在获得所有解决方案后停止,有什么方法可以解决这个问题?_Java_Stack_N Queens - Fatal编程技术网

Java 试图找出如何使这个n queens方法在获得所有解决方案后停止,有什么方法可以解决这个问题?

Java 试图找出如何使这个n queens方法在获得所有解决方案后停止,有什么方法可以解决这个问题?,java,stack,n-queens,Java,Stack,N Queens,我正在研究好的oln皇后问题,使用堆栈而不是递归调用,以便找到N皇后的解决方案总数。我相信我的程序是有效的,除了我在想出如何打破找到解决方案的循环方面遇到了困难。有什么方法可以做到这一点 这是我的一门计算机科学课,使用java。我已经尝试了我的朋友建议的方法,在当前行位于板中时设置条件,但这会导致在找到解决方案之前停止解决方案搜索出现一些问题。当堆栈的大小为1时,我也试图打破循环,但这只在N=4时起作用,对于更大的N值,程序也可能不适用于N>4,还没有测试过 当N=5和 Exception in

我正在研究好的oln皇后问题,使用堆栈而不是递归调用,以便找到N皇后的解决方案总数。我相信我的程序是有效的,除了我在想出如何打破找到解决方案的循环方面遇到了困难。有什么方法可以做到这一点

这是我的一门计算机科学课,使用java。我已经尝试了我的朋友建议的方法,在当前行位于板中时设置条件,但这会导致在找到解决方案之前停止解决方案搜索出现一些问题。当堆栈的大小为1时,我也试图打破循环,但这只在N=4时起作用,对于更大的N值,程序也可能不适用于N>4,还没有测试过

当N=5和

Exception in thread "main" java.util.EmptyStackException
    at java.base/java.util.Stack.peek(Stack.java:102)
    at java.base/java.util.Stack.pop(Stack.java:84)
    at Assignment22.stacker(Assignment22.java:61)
    at Assignment22.main(Assignment22.java:11)
//获取N个皇后的解决方案数
公共静态整数堆栈器(布尔[][]板,整数){
Stack queensPos=新堆栈();
int行=0;
int col=0;
int numSolutions=0;
//需要弄清楚如何告诉程序
//返回上一行并移除皇后
//如果col=3和row=1,皇后将始终放置在那里
//然而,如果女王被安置在那里,就没有解决办法
//如果正在处理的行在板中
而(行=0;i--,j--){
如果(董事会检查[i][j]){
返回true;
}
}
//右上对角线检查
对于(i=row,j=col;i>=0&&j=0&&i

我希望程序最终会停止,但我得到了一个无限循环,并且,根据我尝试过的修复,ArrayIndexOutOfBoundsException或EmptyStackException是ArrayIndexOutOfBoundsException还是EmptyStackException

我发现的主要问题是,当N>4时,Queen不能放在最后一列的任何位置,所以我修改了这个条件

if(!(列
并添加了行>0的条件

最终堆垛机方法:

公共静态整数堆栈器(布尔[][]板,整数){
Stack queensPos=新堆栈();
int行=0;
int col=0;
int numSolutions=0;
int colLastUsed=0;
//需要弄清楚如何告诉程序
//返回上一行并移除皇后
//如果col=3和row=1,皇后将始终放置在那里
//然而,如果女王被安置在那里,就没有解决办法
//如果正在处理的行在板中
while(第0行){
行-=1;
}
板[行][列]=假;
numQueens+=1;
//尝试解决第二排末尾的皇后将继续被放置的问题
//似乎正在工作
如果(!(列<线路板[行]。长度-1)和行>0){
col=queensPos.pop();
行-=1;
板[行][列]=假;
numQueens+=1;
col+=1;
}否则{
col+=1;
}
//如何检查您使用的列号
}否则{
//如果女王能被安置
//把女王放在第一排,上校
板[行][列]=真;
蜂王座推进(col);
numQueens-=1;
//移到下一行
行+=1;
//从行的开头开始
col=0;
}
}
}
返回numSolutions;
}

“ArrayIndexOutOfBoundsException或EmptySackException”什么异常?请编辑您的帖子,以包含完整的错误消息以及导致错误的行。(我们在堆栈溢出中看不到行号)编辑以包含错误消息以及在发生异常的行中我们看不到行号。请显示哪些行通过其他方式导致了错误。发生异常的行旁边标有注释,位于注释“//如果列不合适”下方。您永远不会在方法
堆栈器的
堆栈中放置任何内容。