您的位置:首页 > 编程语言 > Java开发

八皇后问题(java)

2014-05-07 22:38 225 查看
1.问题描述:

在一个8*8的棋盘上放置8个皇后,不允许任何两个皇后在棋盘的同一行、同一列和同一对角线上。



2.分析

1)

对8 x 8的二维数组上的某点a[i][j](0<=i,j<=7)

如果a[s][q]满足|s-i|=|q-j|,a[s][q]在a[i][j]的对角线上。

如果s=i,则a[s][q]在a[i][j]的同一列上。

2)

每行有且仅有一个皇后:声明数组Queen[8] 存放皇后位置//Queen
数组的含义为将第n个皇后放在格子的(n,Queen
)位置

public static int Place(int n)//判断(n,Queen
)位置是否可以放皇后

3.代码
package Queen;

public class Queen {

static int Max=8; //皇后的个数

static int []Queen=new int[Max]; //Queen
数组的含义为将第n个皇后放在格子的(n,Queen
)位置

static int count=0; //记录总计有多种放置方式

public static int Place(int n)//判断(n,Queen
)位置是否可以放皇后

{

int i;

for(i=0;i<n;i++)

{

if(Queen[i]==Queen
||Math.abs(Queen
-Queen[i])==n-i)//判断是否在同一列或者对角线上,Queen[i]==Queen
判断同一列是否有皇后

//Math.abs(Queen
-Queen[i])==n-i)判断对角线上是否有皇后

return 0;//同一列或者对角线上有皇后时该位置不能放皇后

}

return 1;//可以放皇后

}

public static void NQueen(int n)//放置第n行的皇后

{

int i=0;

for(i=0;i<Max;i++)

{

Queen
= i;

if(Place(n)==1){

if(n==Max-1) //八个皇后全部放完

{

Show(); //输出八个皇后的位置

System.out.println();

count++; //放置方式加一

}

else

NQueen(n+1); //放置下一行的皇后

}

}

}

public static void Show()

{

for(int i=0;i<Max;i++)

{

System.out.print("("+i+","+Queen[i]+")");

}

}

public static void main(String[] args) {

NQueen(0); //初始放置第一行的皇后

System.out.print("共有"+count+"种方式");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: