n皇后问题

来源:互联网 发布:mac打开文件夹很慢 编辑:程序博客网 时间:2024/04/30 22:18
import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * Created by fhqplzj on 16-10-10 at 下午9:07. */public class NQueenProblem {    public List<List<String>> solveNQueens(int n) {        List<List<String>> result = new ArrayList<>();        solveNQueens(n, new int[n], 0, result);        return result;    }    private void solveNQueens(int n, int[] a, int i, List<List<String>> result) {        if (i == n) {            ArrayList<String> tmp = new ArrayList<>();            for (int j : a) {                char[] data = new char[n];                Arrays.fill(data, '.');                data[j] = 'Q';                tmp.add(String.valueOf(data));            }            result.add(tmp);            return;        }        for (int j = 0; j < n; j++) {            a[i] = j;            if (isValid(a, i)) {                solveNQueens(n, a, i + 1, result);            }        }    }    private boolean isValid(int[] a, int i) {        for (int j = 0; j < i; j++) {            if (a[j] == a[i] || i - j == Math.abs(a[i] - a[j])) {                return false;            }        }        return true;    }    private void printResult(List<List<String>> results) {        int count = 0;        for (List<String> result : results) {            if (count == 0) {                System.out.println(String.format("Case %d:", ++count));                result.forEach(System.out::println);            } else {                System.out.println();                System.out.println(String.format("Case %d:", ++count));                result.forEach(System.out::println);            }        }    }    public static void main(String[] args) {        NQueenProblem nQueenProblem = new NQueenProblem();        nQueenProblem.printResult(nQueenProblem.solveNQueens(8));    }}

0 1