顺晟科技
2021-06-16 10:38:54
212
//八皇后
/*
八个皇后放在一个8*8的棋盘上,不允许两个皇后在棋盘的同一行、列和对角线上。
1)
对于88二维阵列上的点a[i]j,
如果A[s][q]满足| s-I |=| q-j |,则a [s] [q]在a[i][j]的对角线上。
如果s=i,那么a[s][q]在a[i][j]的同一列。
2)
每行只有一个皇后:声明数组皇后[8]存放皇后的位置。//数组Queen [n]的意思是把第n个Queen放在网格的(n,Queen[n])位置
公有静态int judge(int n)//判断职位(n,Queen[n])是否可以担任皇后。
3)
每行只放一个皇后,每一个点都试一遍,这样皇后最后放的位置都可以试出来
*/
公共八等女王{
//定义皇后的数量
static int queen num=8;
static int[]Queen=new int[queenam];
//最终满足条件的次数
静态int count=0;
//写一个回顾,把皇后放在每一行,以便放下一行。
Public static void NQueen(int n)//将皇后放在n行
{
//测试每行的每个位置,放置皇后
for(int I=0;i queennumi ) {
//指定女王的位置
queen[n]=I;
//判断女王是否可以安置
if(judge(n)){
//如果是最后一行,且满足条件,则执行操作总数。
if(n==queennum-1){
show();
system . out . println();
计数;//方法加一
}else {
//否则,把皇后放在下一排
NQueen(n ^ 1);
}
}
}
}
//写一个函数,确定是否可以放置
public static boolean judge(int n)//判断(n,Queen(n))是否可以将queen * n作为行放置。
{
//循环应该结束,因为所有完整的列都应该与上面的所有对角线进行比较
for(int j=0;j n;j ) {
//先判断同一个列,再判断对角线,同行不用判断因为是一行一行放的,只有一个放在没有一行。
if(Queen[j]==Queen[n]| | math . ABS(Queen[j]-Queen[n])==n-j){
返回false
}
}
返回true
}
公共静态无效显示()
{
for(int I=0;iqueennumI)
{
System.out.print('(' i ',' Queen[I]')');
}
}
公共静态void main(String[] args){
NQueen(0);//首先将皇后放在排
System.out.print('有' count '方式');
}
}
测试结果: (共8种)
(0,0)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,1)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,2)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,3)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,4)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,5)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,6)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
(0,7)
(1,0)
(2,0)
(3,0)
(4,0)
(5,0)
(6,0)
(7,0)
有8种方法
11
2022-03
11
2022-03
10
2022-03
10
2022-03
28
2021-08
28
2021-08