java求解八皇后的重复问题

qq_21805183 2015-10-16 04:45:26
先说下我的思路,首先八皇后不能在同一行。所以int[8] 表示每一行皇后所在的列。然后依次递归,比如{1, 3, 5 ,2 ,6 ,8 ,4 ,7 }表示第一行皇后在第一列,第二行在第三列依此类推。
源码如下
public class EightQueen {
static final int ROWS=8;
static final int LINES=8;
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<int[]> result = new ArrayList<int[]>();
selectNextRow(1, 1, null, result);
for (int[] item : result) {
for (int i : item) {
System.out.print(i+" ");
}
System.out.print("\n");
}
}
static void selectNextRow(int row,int line,int[] arry,ArrayList<int[]> arlist)
{
for(int i=1;i<=LINES;i++)
{
if(row==1)
{
int[] ar = new int[8];
ar[row-1]=i;
selectNextRow(row+1, i, ar, arlist);
}
else
{
if(row<=ROWS)
{
int[] temp = new int[8];
temp = arry.clone();
int left=line-1;
int right = line+1;
boolean Inarry = false;
for (int j : temp) {
if(j==i)
{
Inarry=true;
break;
}
}
if(i!=left&&i!=right&&!Inarry)
{
temp[row-1] = i;
selectNextRow(row+1, i, temp, arlist);
if(row==ROWS)
{
arlist.add(temp);
}
}

}
}
}
}
}
最后显示有5242种。知道重复了很多。但是不知道在哪些地方重复了。求大神不吝赐教
...全文
104 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21805183 2015-10-16
  • 打赏
  • 举报
回复
首先定义一个一维数组,并给第一个值初始化为第一行皇后所在的列,然后把这个数组传递到求解第二行所在位置,从1开始循环到8,如果不在前面传递的数组里面并且和上一行不在一条斜线上。则加入数组,依此递归,最后重复很多

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧