八皇后
1.通过递归回溯来判断路线
2.先放第一行第一列,然后放第二个是否合适,放完第三个再回溯看与之前是否冲突
具体实现如下:
public class BaHuangHou {
public static void main(String[] args) {
BaHuangHou baHuangHou=new BaHuangHou();
baHuangHou.check(0);
System.out.printf("一共有%d解法",count);
System.out.printf("一共判断冲突的次数%d 次",judagecount);
}
//定义大小
int max=8;
//用下标表示行,即第几个皇后,value表示i+1个皇后也就是i+1行,value+1列
int [] array=new int[max];
//统计次数
static int count=0;
static int judagecount=0;
//通过递归来摆放皇后
private void check(int n)
{
if (n==max)
{
print();
return;
}
for (int i = 0; i <max ; i++) {
array[n]=i;
//判断位置是否符合
if (judage(n))
{
//符合接着放
check(n+1);
}
}
}
//判断位置是否符合
private boolean judage(int n)
{
judagecount++;
for (int i = 0; i <n ; i++) {
//是否在同一列和判断是否在同一个对角线上
if ( array[i]==array[n]|| Math.abs(n-i)==Math.abs(array[n]-array[i]))
{
return false;
}
}
return true;
}
//打印输出
private void print()
{
count++;
for (int i = 0; i <array.length ; i++) {
System.out.print(array[i]+"");
}
System.out.println();
}
}