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;
    }
  • 相关阅读:
    表中表效果
    有关div的位置,隐藏显示和移动
    js 获取服务器控件的值
    JavaScript resizeBy()
    js弹出对话框
    js操作select控件的几种方法发布
    javascript
    POJ2135(最小费用最大流模板)
    吐槽(2012/5/21)
    POJ2391(网络流)
  • 原文地址:https://www.cnblogs.com/Xycdada/p/8005476.html
Copyright © 2011-2022 走看看