N皇后

问题描述

N皇后问题是一个以国际象棋为背景的问题:如何能够在 N×N 的国际象棋棋盘上放置N个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

解题思路

采取递归+回溯的解法。回溯法又称试探法。回溯法的基本做法是深度优先搜索。即从一条路往前走,能进则进,不能进则退回来,换一条路再试。

代码

输入:

10  ---- 10个测试用例
1   ---- N
2
3
4
5
6
7
8
9
10

输出:

#1 1
#2 0
#3 0
#4 2
#5 10
#6 4
#7 40
#8 92
#9 352
#10 724

import java.util.LinkedList;
import java.util.Scanner;

public class NQueen {

    static int N;
    static int answer;
    static LinkedList visited;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int test_case = scanner.nextInt();
        for (int T=1;T<=test_case;T++){
            N = scanner.nextInt();
            answer = 0;
            visited = new LinkedList();
            dfs(0);//从第0行开始递归

            System.out.println("#"+T+" "+answer);

        }
        scanner.close();

    }

    static void dfs(int n){
        if(n == N){//递归结束条件:递归到了N
            answer++;
            return;
        }
        int length = visited.size();
        for (int i=0;i

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