这个程序是从网上copy的,原程序是递归,我运用了原框架改写成了非递归方法。
public class Example {
public static int
num = 0; //累计方案总数
public static final
int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数
public static int[]
cols = new int[MAXQUEEN+1]; //定义cols数组,表示8列棋子摆放情况
public Example(){
//核心函数
getArrangement();
System.out.print("\n");
System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。");
}
public void
getArrangement(){
//主要函数。非递归方法。
for(int
i=1;i<=MAXQUEEN;i++)
cols[i]=0;
int k=1;
while(k
> 0)
{
cols[k]++;
//下一个位置
while((cols[k]<=MAXQUEEN)&&(!check(k)))
cols[k]++; //找到一个位置
if(cols[k]
<= MAXQUEEN) //若位置合法
if(k == MAXQUEEN) //一个解
{
num++;
printChessBoard();
}
else
//还不是解
k++;
else
//位置不合法
{
cols[k]=0;
k--;
}
}
}
boolean check(int k)
//检测合法函数
{
for(int i
= 1; i < k; i++)
if((Math.abs(k - i) ==Math.abs(cols[k] -
cols[i])) || cols[i] == cols[k])
return
false;//1.是否在同一斜线;2.是否位于同一列
return
true;
}
public void
printChessBoard(){
System.out.print("第"+num+"种走法 \n");
for(int i=1;i<=MAXQUEEN;i++){
for(int
j=1;j<=MAXQUEEN;j++){
if(i==cols[j]){
System.out.print("Q ");
}else
System.out.print("+ ");
}
System.out.print("\n");
}
}
public static void
main(String args[]){
Example queen = new Example();
}
}