package com.duan.javaSE;
public class EightQuene {
static int [][]quene =new int[8][8];
static int count=0;
public static void main(String[] args) {
getMethod(quene,1);
System.out.println(count);
}
static int getMethod(int [][]q,int n) {
int i=-1;
int j=-1;
try {
int[][] mem = new int[8][8];
for (int r = 0; r < 8; r++)
System.arraycopy(quene[r], 0, mem[r], 0, 8);
for (i = 0; i < 8; i++)
if (check(quene, n-1, i)) {
quene[n-1][i] = n;
if (n < 8) {
getMethod(quene, n + 1);
for (int r = 0; r < 8; r++)
System.arraycopy(mem[r], 0, quene[r], 0, 8);
} else
//此处添加打印quene数组,可以展示皇后排列
count++;
}
return 0;
} catch (Exception e) {
System.out.println(i);
System.out.println(j);
throw new RuntimeException(e);
}
}
static boolean check(int [][]q,int ii,int jj){
int i=ii;
int j=jj;
for(int l=0;l<8;l++)
if(q[i][l]!=0)
return false;
for(int l=0;l<8;l++)
if(q[l][j]!=0)
return false;
while(true)
{
i++;
j++;
if(i>7||j>7)
break;
if(q[i][j]!=0)
return false;
}
i=ii;
j=jj;
while(true)
{
i++;
j--;
if(i>7||j<0)
break;
if(q[i][j]!=0)
return false;
}
i=ii;
j=jj;
while(true)
{
i--;
j++;
if(i<0||j>7)
break;
if(q[i][j]!=0)
return false;
}
i=ii;
j=jj;
while(true)
{
i--;
j--;
if(i<0||j<0)
break;
if(q[i][j]!=0)
return false;
}
return true;
}
static void setNum(int [][]q,int i,int j,int n)
{
for(int l=0;l<8;l++)
q[i][l]=n;
for(int l=0;l<8;l++)
q[l][j]=n;
while(true) {
i++;
j++;
if (i > 7 || j > 7)
break;
q[i][j]=n;
}
while(true) {
i--;
j--;
if(i<0||j<0)
break;
q[i][j]=n;
}
}
}
八皇后问题
最新推荐文章于 2024-06-20 20:20:21 发布