回溯法八皇后问题

package com.supermars.practice;

import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;

public class 回溯法八皇后问题 {
    static Scanner cin = new Scanner(new BufferedInputStream(System.in));
    static int tot = 0, n = 0;
    static int C[] = new int[1 << 7];

    public static void main(String[] args) {
        while (cin.hasNext()) {
            n = cin.nextInt();
            search(0);// 0行开始
            System.out.println(tot);
            tot = 0;
            n = 0;
            Arrays.fill(C, 0);
        }

    }

    /**
     * 构造解答数<8!
     *
     * @param cur
     *            解答数行,0行开始
     */
    private static void search(int cur) {
        int i, j;
        if (cur == n)
            tot++;
        else {
            for (i = 0; i < n; i++) { // 该行每一列
                C[cur] = i;
                int ok = 1;
                for (j = 0; j < cur; j++) { // 是否与之前的冲突
                    if (C[cur] == C[j] || cur - C[cur] == j - C[j]
                            || cur + C[cur] == j + C[j]) {
                        ok = 0;
                        break;
                    }

                }
                if (ok == 1) {
                    search(cur + 1);
                }

            }

        }

    }
}

你可能感兴趣的:(算法,ACM)