Поиск специальных --DFS

Проблема восемь ферзей

https://www.luogu.org/recordnew/show/19470456

  1. Эта проблема была первая мысль была взрывной поиск каждого узла можно, используя задний смотрел ,, но на этот раз сложность ( 2 N ) O (2 ^ п) конечноиндекс взрыв
  2. Мы пройденные один раз для каждого слоя может
    точно размещать друг на строку и ферзь, если С [х] представляет собой номер столбец строки х Queen, проблема становится полной задачей генерации перестановок. И п от 0 до расположены в общей сложности только п !, По крайней мере , меньше , чем индекс.
import java.util.Scanner;

public class Main{

    private int[] col = new int[20];
    private boolean[][] use = new boolean[3][100];
    private int size;
    private int[] result = new int[20];
    private int ans = 0;

    public void get_data(){
        Scanner in = new Scanner(System.in);
        size= in.nextInt();
    }

    public void dfs(int i){
        if(i==size+1) {
            ans++;
            if(ans<=3)
                this.output();
            return;
        }

        for(int j=1;j<=size;j++){
            if(!use[0][j]&&!use[1][i+j]&&!use[2][i-j+size]) {
                result[i] = j;
                use[0][j] = use[1][i+j] = use[2][i-j+size] = true;
                dfs(i+1);
                use[0][j] = use[1][i+j] = use[2][i-j+size] = false;
            }
        }
    }

    public void solve(){
        dfs(1);
        System.out.println(ans);
    }

    public void output(){
        for(int i=1;i<=size;i++){
            System.out.print(result[i]+" ");
        }
        System.out.println();
    }


    public static void main(String arg[]){
        Main obj = new Main();
        obj.get_data();
        obj.solve();
    }
}

рекомендация

отblog.csdn.net/baidu_41560343/article/details/90680955