zoukankan      html  css  js  c++  java
  • N皇后问题

    几句废话:这道题很经典哦!

    试题描述
     在N*N的方格棋盘放置N个皇,使得它们不相互攻击(即任意2个皇后不允许处在同一行,或同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种符合要求放置方法。
    输入
    输入中有一个正整数N≤20,表示棋盘和皇后的数量 
    输出
    为一个正整数,表示N个皇后的不同放置方法数。 
    输入示例
    5
    输出示例
    10
    #include <iostream>
    using namespace std;
    #include <math.h>
    int sum = 0;
    int upperlimit = 1;
    void compare(int row,int ld,int rd)
    {
        if(row!=upperlimit)
        {
            int pos = upperlimit&~(row|ld|rd);
            while(pos!=0)
            {
                int p=pos&-pos;
                pos-=p;
                compare(row+p,(ld+p)<<1,(rd+p)>>1);
            }
        }
        else{
            sum++;
        }
    }
    int main()
    {
        int n;
        cin>>n;
        upperlimit = (upperlimit<<n)-1;
        compare(0,0,0);
        cout<<sum<<endl;
        return 0;
    }
  • 相关阅读:
    001 云开发基础
    HttpClient 调用外部接口(简单实用)
    MD5加密(简单实现_可自行扩展)
    SAA C02考点梳理
    支配树
    CF1320E 题解
    dp套dp
    20210705模拟赛总结
    20210703模拟赛
    20210629模拟赛总结
  • 原文地址:https://www.cnblogs.com/jason2003/p/5914586.html
Copyright © 2011-2022 走看看