八皇后问题(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+"种方式");
}
}
在一个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+"种方式");
}
}
相关文章推荐
- JAVA使用回溯法解决n皇后问题的算法
- 回溯法求解N皇后问题(Java实现)
- 程序员面试金典(动态规划):8(n)皇后问题(java解法)
- n皇后问题回溯法---java图形界面实现回溯过程
- N皇后问题的Java实现
- 八皇后问题,Java实现,可推广解决N皇后问题
- n皇后问题(人工智能试验java实现)
- Java实现-N皇后问题2
- n皇后问题求解 java
- hdu 2553 N皇后问题<java>
- java实现回溯法解n皇后问题
- 8皇后问题的递归解决 java
- N皇后问题 java程序
- N皇后问题可视化实现(java)
- N皇后问题 位运算解法【JAVA实现】
- N皇后问题,java实现
- 递归分治算法之N皇后问题(Java版本)
- BASIC-27 / Tsinsen 1085 2n皇后问题(java)
- 剑指Offer(java版)-8皇后问题