首页 > 编程语言 >蓝桥杯n皇后问题C++

蓝桥杯n皇后问题C++

时间:2024-03-25 20:31:13浏览次数:21  
标签:10 canPlace int ++ dfs 蓝桥 -- C++ 皇后

用到了dfs算法

#include<iostream>
using namespace std;

int n;
int a[10][10] = { 0 };
int sum = 0;

void prin(int a[][10]) 
{
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
}

void dfs(int f) 
{
    if (f == n) 
    {
        sum += 1;
        // prin(a); // 打印解决方案,用于调试
        return;
    }

    for (int i = 0; i < n; i++) 
    {
        bool canPlace = true;

        // 检查当前列
        for (int j = 0; j < f; j++) 
        {
            if (a[j][i] == 1) 
            {
                canPlace = false;
                break;
            }
        }

        // 检查主对角线
        for (int j = f - 1, k = i - 1; j >= 0 && k >= 0; j--, k--) 
        {
            if (a[j][k] == 1) 
            {
                canPlace = false;
                break;
            }
        }

        // 检查副对角线
        for (int j = f - 1, k = i + 1; j >= 0 && k < n; j--, k++) 
        {
            if (a[j][k] == 1) 
            {
                canPlace = false;
                break;
            }
        }

        if (canPlace) 
        {
            a[f][i] = 1;
            dfs(f + 1);
            a[f][i] = 0;
        }
    }
}

int main() 
{
    cin >> n;
    dfs(0);
    cout << sum;
    return 0;
}

标签:10,canPlace,int,++,dfs,蓝桥,--,C++,皇后
From: https://blog.csdn.net/qq_52620232/article/details/137024767

相关文章

  • C++动态内存管理
    目录C/C++内存分配C++内存管理C++内存管理介绍C++内存管理使用C++内存管理基本语法operatornew和operatordelete函数定位new表达式(placement-new)基本语法使用场景malloc/free和new/delete相同点不同点C/C++内存分配在C语言动态内存管理章节已经了解到内......
  • 蓝桥杯算法集训 - Week 4:BFS、并查集、Flood Fill、哈希、单调栈/队列
    蓝桥杯算法集训-Week4本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、BFSBFS算法复习参考:BFS(Java)广度优先搜索简单介绍、模板、案例(一)Ⅰ、代码模板staticvoidbfs(Troot){//双端队列,用来存储元素D......
  • C++中用户自定义数据类型
    在C++中,用户自定义数据类型通常指的是通过struct、class、enum和typedef关键字定义的类型。这些自定义类型可以包含各种成员,包括基本数据类型、其他自定义类型、成员函数(对于class)、访问修饰符等。下面是这些自定义数据类型可以包含的组件的概述:结构体(struct)结构体是一种......
  • 蓝桥杯练习题——博弈论
    1.必胜态后继至少存在一个必败态2.必败态后继均为必胜态Nim游戏思路23,先手必赢,先拿1,然后变成22,不管后手怎么拿,先手同样操作,后手一定先遇到00a1^a2^a3…^an=0,先手必败,否则先手必胜#include<iostream>usingnamespacestd;constintN=1e5+1......
  • C++学习
    学习主线算法基础:https://www.acwing.com/activity/content/11/理解算法原理,完成模板题,熟练使用模版课外练习:针对特定主题,可以进行拓展练习爱思创题库:https://aisichuang.net/main/questionBank/questionBankhttps://leetcode.cn/leetbook/https://ac.nowcoder.co......
  • C++第五十六篇——VC获取显示器状态(捕获熄屏/亮屏)
    参考链接:https://blog.csdn.net/rocklee/article/details/76636253此篇文章实现C++可以获取屏幕亮灭的消息,程序在后台运行,不会有控制台窗口显示。第一步:新建一个控制台程序 第二步:编写屏幕亮灭的代码ScreenTest.cpp#include<windows.h>#include<iostream>usingname......
  • 【C++从0到1-黑马程序员】文件操作
    C++从0到1-黑马程序员课程学习笔记课程链接:61C++文件操作-文本文件-写文件_哔哩哔哩_bilibili程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放可以通过文件将数据持久化C++中对文件操作需要包含头文件 <fstream>文件类型分为两种:文本文件-文件以......
  • 【C++从0到1-黑马程序员】引用
     C++从0到1-黑马程序员课程学习笔记课程链接: 06C++中的引用-引用的基本语法_哔哩哔哩_bilibili1.引用的基本语法作用:给变量起别名语法:数据类型&别名=原名2.引用的注意事项1.引用必须有初始化    举个......
  • 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新
    一、前言本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放。本项目主要是QWidget编写的一些开源的demo,支持Qt4、Qt5、Qt6,支持任意系统,预计会有100多个,一直持续更新完善,代码简洁易懂注释详细,每个都是独立项目,非常适合初学者,代码随意传播使用。不仅有界面UI相关,......
  • C++ Class
    this指针this指针是一个const指针,指向当前对象,通过this可以访问当前对象的所有成员,无论是protect/private/public。以下是一个示例:#include<iostream>classstu{public:voidsetA(intA);voidsetB(intB);voidprint();private:intA,......