单纯用递归解决该问题,就是利用一个一维数组表示出每种解,例如arry【n】= i,其中n表示第n行的棋子,而 i 表示该 行的棋子所在列的位置,该问题可以用贪心算法进行优化,这是针对初学者练习递归时的一种解决办法,该代码并不是为了优化解决问题,只是对递归方法的应用
private boolean judge(int n){//此方法用来判断棋子摆放位置是否正确
for (int i = 0; i < n; i++) {
//Math.abs(n - i) == Math.abs(arry[n] - arry[i])判断是否在同一列或者在斜对角上
//arry[n] == arry[i]是为了判断两行元素是否在同一列上
if (arry[n] == arry[i] || Math.abs(n - i) == Math.abs(arry[n] - arry[i])){
return false;
}
}
return true;
}
private void print_(){//用来打印找出的每一种解法
for (int i = 0;i < max;i++){
System.out.print(arry[i] + " ");
}
System.out.println();
}
private void check(int n){
if (n == max){//当n到8的时候,就说明所有的旗子都已经摆放完毕,就可以打印出来
print_();
return;
}
for (int i = 0; i< max; i++){
arry[n] = i;
if(judge(n)){
check(n+1);//递归的运用
}
}