使用循环的方式来解决八皇后问题,
其基本思路和递归方式差不多,
只是在BackTrack函数上面有一些不同,将原来的递归改为循环的方式。
//用循环实现皇后问题。非递归。
class Nqueen{
int n;
int []x;
int sum;
public Nqueen(int nx){
n = nx;
x = new int[n+1];
sum = 0;
}
public boolean place(int k){ //判断当前位置是否可行
boolean res = true;
for (int i =0;i<k;i++){
if (x[i] == x[k] ||((k-i) == Math.abs(x[k]-x[i]))) {
res = false;
break;
}
}
return res;
}
void Print(){ //打印函数
for (int i = 1; i<=n;i++){
for (int j = 1;j<=n;j++){
if (x[i] == j){
System.out.print("Q");
}
else {
System.out.print("#");
}
}
System.out.println("");
}
System.out.println("");
}
public int BackTrack(){
int i = 1;
x[i] = 0;
while (i >0){
x[i] += 1;
while ((x[i] <= n) && !place(i)) //当前位置满足要求
x[i]+=1; //下一行
if (x[i] <= n){
if (i == n){
sum += 1;
Print();
}
else {
++i;
x[i] = 0;
}
}
else { //超出位置,减减
--i;
}
}
return sum;
}
}