八皇后回溯

tech2023-11-27  32

八皇后问题:在8x8格棋盘上摆放8个皇后,任意两个皇后不能处于同一行、同一列、同一斜线上,问有多少种摆法。

思路:

第一个皇后放在第一行第一列第二个皇后从第二行第一列开始检测,如果不行,放在第二列、第三列、…一直到放完所有皇后,如果中途发现有冲突,回溯改变先前放置的皇后位置使用一个一位数组表示,下标表示第几个皇后,值表示皇后放置的列数 public class Queen{ int max=8;//皇后个数 int[] array=new int[max];//每个皇后的位置 //遍历第n个皇后的位置 private void check(int n){ if(n==max){ return; } for(int i=0;i<max;i++){ arr[n]=i; if(judge(n)){//不冲突,开始放置下一个皇后 check(n+1); } //冲突,则移动这个皇后位置,继续检查 } } //查看放置第n个皇后时,是否冲突 private boolean judge(int n){ for(i=0;i<n;i++){ if(array[i]==array[n]||Math.abs(n-i)==Math.abs(array[n]-array[i])){ return false; } } return true; } }
最新回复(0)