public class EightQueen {
public static final int size=8;
public static int[] rows = new int[size];
public static int[] cols = new int[size];
public static int[] cross1 = new int[2*size]; //正对角线
public static int[] cross2 = new int[2*size]; //副对角线
public static int count = 0;
//public static int queen=0;
public static void main(String[] args)
{
place(0);
}
public static void place(int i)
{
for(int j=0;j<size;j++)
{
if(cols[j]==0&&cross1[i-j+size-1]==0&&cross2[i+j]==0)//列和正负对角线全是0,可以放皇后
{
rows[i]=j; //确定i行上j列是皇后
cols[j]=1; //宣布被标志
cross1[i-j+size-1]=1;
cross2[i+j]=1;
if(i<size-1)
{
place(i+1); //从1-7,一直放皇后到地7行
}
else
{
count++; //记录总案例数
display(); //display()控制输出形式
}
cols[j]=0; //回溯
cross1[i-j+size-1]=0;
cross2[i+j]=0;
}
}
}
public static void display()
{
System.out.println("case " + count + ":");
for (int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
System.out.print("|");
if(j==rows[i])
System.out.print("Q");
else
System.out.print(" ");
}
System.out.println("|");
}
}
}
三星题 6.20八皇后问题
最新推荐文章于 2020-04-10 21:51:45 发布