0 java arrays algorithm boolean function
我正在尝试创建一个程序来打印1 <= n <= 13n 皇后问题的所有解决方案。该程序将n从命令行读取一个整数,指示要解决的皇后问题的大小。例如,如果n = 5它会打印出
(1, 3, 5, 2, 4)
(1, 4, 2, 5, 3)
(2, 4, 1, 3, 5)
(2, 5, 3, 1, 4)
(3, 1, 4, 2, 5)
(3, 5, 2, 4, 1)
(4, 1, 3, 5, 2)
(4, 2, 5, 3, 1)
(5, 2, 4, 1, 3)
(5, 3, 1, 4, 2)
Run Code Online (Sandbox Code Playgroud)
目前,我只停留在程序的一项功能上。我需要创建一个方法,如果 (A[1], A[2], A[3], ..., A[n]) 表示的排列没有放置两个皇后(棋子),该方法将返回 true相同的对角线,否则返回 false。为了检查 (A[i], i) 和 (A[j], j) 处的两个皇后是否位于同一条对角线上,我需要检查水平距离是否与垂直距离相同。
该函数被调用isSolution()并且应该最多比较每对皇后一次。如果在同一对角线上找到一对,则不再进行进一步比较并返回 false。如果n(n-1) / 2执行所有比较都没有找到对角线攻击,则返回 true。
static boolean isSolution(int[] A){
blah blah blah
}
Run Code Online (Sandbox Code Playgroud)
我已经有一个函数,可以按字典顺序生成集合的所有排列,以及其原始状态的最终排列。
函数内部有什么内容isSolution()?我非常迷失,任何东西都会有所帮助,即使是概述isSolution().
我所知道的事情是:i和j是两块之间的水平和垂直距离。我需要制作一对 for 循环来完成每次n(n-1) / 2比较。“ i”和“ j”应该分别是数组索引和数组元素之间的差异。为了安全起见,我还需要适应Math.abs差异。因此,在 for 循环中,初始化i和j作为我提到的差异,然后设置一个 if 来检查if i==j是否返回 false。如果进行了所有比较并且未返回 false,则返回 true。
小智 6
(y1-y2)/(x1-x2)如果 x1,y1 和 x2,y2 是对角线,则为 1 或 -1
它基本上是两个坐标之间的线的角度