8皇后问题

8皇后问题_第1张图片
image.png

首先,可归纳问题的条件为,8皇后之间需满足:
1.不在同一行上
2.不在同一列上
3.不在同一斜线上
4.不在同一反斜线上
第一种方法:
先全排列,然后再判断每个排列是否满足8皇后的要求
先定义数组c[8]初始化分别为0-7
c[i]表示第i行第c[i]列


public class Pass { 
     HashSet set = new HashSet();
     public void Permutation(int[] c,int begin){
            if(c.length==0)
                return;
            if(begin==c.length-1){
                if(judge(c)){//判断是否符合8皇后需求,如果符合就输出该排列
                    for(int k=0;k

方法一 的效率比较低,方法二采用回溯算法

public class Test2 {    
    int n=8;//n皇后问题
    int[] x=new int[n+1];//x[i]表示皇后i放在第i行第x[i]列
    public void backTrace(int t){
        if(t>n){
            print();
            System.out.println();
            return;
        }else{
            for(int i=1;i<=n;i++){
                x[t]=i;
                if(judge(t)){
                    backTrace(t+1);
                }
            }
        }       
    }
    public boolean judge(int t){
        for(int j=1;j

你可能感兴趣的:(8皇后问题)