zoukankan      html  css  js  c++  java
  • hdu 2553 经典n皇后问题

    题意:

    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。

    用一个一维数组来保存每行的皇后所在的列,降低空间复杂度。

    这道题比较坑的是不打表容易tle。。。t了2次才不甘心的打表ac。

    #include<iostream>
    #include<math.h>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<string>
    #define ll long long
    #define MAX_N 105
    
    using namespace std;
    
    int n;
    int num[15];
    int ans[15],temp;
    bool judge(int row,int col)
    {
        for(int i = 1; i < row; i++)
        {
            if(abs(num[i]-col)==abs(i-row) || col==num[i])
                return false;
        }
        return true;
    }
    void solve(int row)
    {
        if(row>n)
        {
            temp++;
            return ;
        }
        for(int i = 1; i <= n; i++)
        {
            if(judge(row,i))
            {
                num[row] = i;
                solve(row+1);
            }
        }
    }
    int main()
    {
        cin.sync_with_stdio(false);
        for(int i = 1; i <= 10; i++)
        {
            n = i,temp = 0;
            solve(1);
            ans[i] = temp;
        }
        while(cin>>n,n)
        {
            cout<<ans[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    input输入密码变黑点密文
    清除浮动的几种方法
    const let,console.log('a',a)跟console.log('a'+a)的区别
    Egret Wiing3快捷键
    时间转换成2016/12/29 14:23:09格式
    http status code
    构造函数模式
    Log4net
    Autofac
    WebApi返回Json格式字符串
  • 原文地址:https://www.cnblogs.com/Xycdada/p/8005476.html
Copyright © 2011-2022 走看看