zoukankan      html  css  js  c++  java
  • hdu 2553 n皇后问题【DFS递归解法】

    <题目链接>

    题目大意:

    Problem Description
    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。
    Input
    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
    Output
    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
    Sample Input
    1
    8
    5
    0
     
    Sample Output
    1
    92
    10
     
    #include <bits/stdc++.h>
    using namespace std;
    
    int n,n1,x[10],y[10],sum;
    
    bool check(int k){
        for(int i=1;i<k;i++){
            if((x[i]==x[k])||(abs(x[i]-x[k])==abs(i-k)))return false;
        }
        return true;
    }
    void dfs(int pos){
        if(pos>n){ sum++;return; }
        for(int i=1;i<=n;i++){
            x[pos]=i;
            if(check(pos))dfs(pos+1);
        }
    }
    int main(){
        for(int i=1;i<=10;i++){
            n=i;sum=0;
            dfs(1);
            y[i]=sum;
        }
        while(~scanf("%d",&n1),n1){
            printf("%d
    ",y[n1]);
        }
    }
    2018-03-31


    作者:is_ok
    出处:http://www.cnblogs.com/00isok/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    程序员偷偷深爱的9个不良编程习惯
    JQuery实现放大镜
    ACM1995
    liubo.im
    Linux中的一些点
    EPOLL使用详解
    Elays'Blog
    c#数据库解析
    codeforces #332 div 2 D. Spongebob and Squares
    类型
  • 原文地址:https://www.cnblogs.com/00isok/p/8681124.html
Copyright © 2011-2022 走看看