public class queen {
private int[] box;//检查同行和同列是否有Q
private int[] rl; //检查左下和右上是否有Q
private int[] lr; //检查左上和右下是否有Q
private int[] queen; //解答
private int num; // 解答编号
public queen() { //构造函数
box = new int[8+1];
lr = new int[2*8+1];
rl = new int[2*8+1];
for(int i = 1; i <= 8; i++)
box[i] = 1;
for(int i = 1; i <= 2*8; i++)
lr[i] = rl[i] = 1;
queen = new int[8+1];
}
public void backtrack(int i) //确定位置
{ if(i > 8) { show(); }
else {
for(int j = 1; j <= 8; j++)
{ if(box[j] == 1 && lr[i+j] == 1 && rl[i-j+8] == 1)
{ queen[i] = j; // 设定为占用
box[j] = lr[i+j] = rl[i-j+8] = 0;
backtrack(i+1);
box[j] = lr[i+j] = rl[i-j+8] = 1; } } } }
protected void show() //显示解答
{
num++;
if(num>=4)
{
return;
}else
{
System.out.println("\n解答 :" + num);
for(int y = 1; y <= 8; y++)
{
for(int x = 1; x <= 8; x++)
{ if(queen[y] == x)
{ System.out.print(" Q"); }
else { System.out.print(" x"); } }
System.out.println();
}
}
}
public static void main(String[] args)
{ queen queen = new queen(); queen.backtrack(1); }
}
参考程序:百度百科“皇后问题”