首页 > 其他分享 >n皇后问题

n皇后问题

时间:2024-05-08 13:38:05浏览次数:15  
标签:right candidate int limit 问题 place 皇后

n皇后问题

  • 位运算版本(返回可能数)
int totalqueen(int n)
{
    if(n < 1) return 0;
    // n = 5
    // 1 << 5 = 0...100000 - 1
    // limit  = 0...011111; 
    // n = 7
    // limit  = 0...01111111;
    int limit = (1 << n) - 1;
    return f2(limit, 0, 0, 0);
}

// limit : 当前是几皇后问题
// 之前皇后的列影响:col
// 之前皇后的右上 -> 左下对角线影响:left
// 之前皇后的左上 -> 右下对角线影响:right
int f2(int limit, int col, int left, int right)
{
    // 所有皇后放完了!
    if(col == limit) return 1;
    // 总限制
    int ban = col | left | right;
    // ~ban : 1可放皇后 0不可放皇后
    int candidate = limit & (~ban);
    // 放置皇后的尝试
    int place = 0;
    // 一共有多少种有用的方法
    while(candidate)
    {
        // 提取出最右侧的1
        // 0 0 1 1 1 0
        // 5 4 3 2 1 0
        // place : 
        // 0 0 0 0 1 0
        // candidate : 
        // 0 0 1 1 0 0
        // 5 4 3 2 1 0
        // place : 
        // 0 0 0 1 0 0
        // candidate : 
        // 0 0 1 0 0 0
        // 5 4 3 2 1 0
        // place : 
        // 0 0 1 0 0 0
        // candidate : 
        // 0 0 0 0 0 0
        // 5 4 3 2 1 0
        place = candidate & (-candidate);
        // 更新可放置位置
        candidate ^= place;
    	ans += f2(limit, col | place, (left | place) >> 1, (right | place) << 1);
    }
    return ans;
}
  • 返回路径
#include <bits/stdc++.h>

using namespace std;

const int N = 15;
char path[N][N];
bitset<2 * N> a, b;
bitset<N> c;
int n;

void dfs(int u)
{
    if(u == n + 1)
    {
        for(int i = 1; i <= n; i ++ )
        {
            for(int j = 1; j <= n; j ++ ) cout << path[i][j];
            cout << endl;
        }
            
        cout << endl;
        return;
    }
    
    for(int i = 1; i <= n; i ++ )
    {
        if(!c[i] && !a[u + i] && !b[i - u + n])
        {
            path[u][i] = 'Q';
            c[i] = a[u + i] = b[i - u + n] = 1;
            dfs(u + 1);
            c[i] = a[u + i] = b[i - u + n] = 0;
            path[u][i] = '.';
        }
    }
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++ )
        for(int j = 1; j <= n; j ++ )
            path[i][j] = '.';
    dfs(1);
    return 0;   
}

标签:right,candidate,int,limit,问题,place,皇后
From: https://www.cnblogs.com/hnu-hua/p/18179452

相关文章

  • 日常问题小记
    (1)下图中,L186行中的"\"颜色为蓝色,与前两行的颜色不同,原因是L186的"\"不是该行的最后一个字符。 本例中,  L186的"\"后还存在2个空格字符将这2个空格字符删除 ......
  • ITIL4视角下的问题管理:构建服务稳定的基石
    在日新月异的信息时代,确保IT服务的稳定与高效已成为决定企业竞争力的核心要素。问题管理作为ITIL4框架中的关键实践,致力于识别并解决导致IT服务中断或性能下降的根本性原因,从而预防未来事件的发生,保障服务的稳定与可靠。这超越了传统的故障应对模式,转向实施预防性策略和持续的服务......
  • FastAdmin动态增加FieldList问题
    最终效果出现的问题1.FastAdmin1.5版本功能正常,移植到1.2版本导致异常。解决办法:更新require-form.js为1.5版本2.js动态渲染FieldList,点击新增阶梯后会导致上面已有的FieldList点击追加会出现多行数据。如图解决办法:新增完毕只渲染新增的FieldList......
  • QTableView设置单元格颜色未生效的问题
    问题:1voidMainWindow::on_tableview_clicked(constQModelIndex&index)2{3item=newQStandardItem("clicked");4//ui->plant_table->data()5item->setData(QBrush(Qt::red),Qt::BackgroundRole);//.setColor(Qt::red)......
  • AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?
    一、方案背景刚刚结束的第十八届北京车展异常火爆,其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据,全国乘用车市场零售达到51.6万辆,其中新能源车的销量约为26万辆,市场渗透率达到50.39%。这意味着新能源汽车的市场占有率和渗透率将持续加大,那么如何......
  • 如何修改element-plus原有样式+解决冒泡带来的问题
    目录1.静态搭建2.修改element-plus原有样式3.问题4.实现代码需求:当我在取色器中选择好颜色后,把element-plus默认的.el-button--primary这个按钮的背景色(--el-button-bg-color)进行切换1.静态搭建<template><el-popoverplacement="bottom"title="主题设置":width="200"......
  • 关于window python2 跑hive的问题
    1.环境必须通过sasl-0.2.1-cp27-cp27m-win_amd64.whl包手动进行安装。如果通过pipinstallsasl或者setup.py的模式window大概率会报错,类似这种C++的2.必须安装pythonVS的依赖windows平台使用MicrosoftVisualC++CompilerforPython2.7编译python扩展可以参考博客 http......
  • 变化电磁场产生引力场的试验【你觉得实验是否有问题?有的话,是哪些问题?】
    变化电磁场产生引力场的试验2023年11月2日凌晨4点,我在地下室实验首次发现了变化电磁场产生引力场的微弱效应,仅高度灵敏的仪器可以检测到。后来经过长时间的反复试验,现在试验产生的引力场效应明显,由试验可以确定:加速运动正电荷可以产生加速度方向相反的引力场。2024年3月1日,我......
  • Linux基础——ARM架构主机系统盘乱序问题
    一、问题描述裸金属宿主机根据qcow2镜像创建的裸金属服务器,创建裸金属服务器时无法正常将sda盘符落在系统盘上;lsblk发现系统盘定义的盘符漂移到sdc盘,涉及问题裸金属服务器的磁盘slot直连磁盘和Raid块设备的启动顺序,无法将/dev/sda盘符落在主机直连磁盘上; 二、问题排查1、......
  • uniapp 编译成h5,返回上一页之后没有触发生命周期问题
    今天开发测试的时候,无意中发现点击分享链接进去登陆成功返回上一页的时候,页面直接空白了。刚开始的时候,就很奇怪,毕竟分享链接这个功能是好久之前的,不可能无缘无故的出问题来着。开始分析问题,查看网络请求,发现空白页面一个请求都没有发出,不寻常。猜测是不是哪里打了断点导致的。......