首页 > 其他分享 >51. N 皇后&52. N 皇后 II

51. N 皇后&52. N 皇后 II

时间:2023-07-06 16:13:05浏览次数:41  
标签:... .. returnSize int 51 II flag 皇后

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:
image

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:

输入:n = 1
输出:[["Q"]]

提示:

1 <= n <= 9

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/n-queens

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int isvalid(int *flag,int cur,int j){
    int i;
    for(i=0;i<cur;i++){
        if(flag[i]==j||abs(flag[i]-j)==abs(i-cur)){
            return 0;
        }
    }
    return 1;
}
//cur为当前操作的行
void backtracking(int n,int cur,int *flag,char*** map,int* returnSize, int** returnColumnSizes){
    int i,j;
    if(cur==n){
        map[*returnSize]=(char**)malloc(sizeof(char*)*n);
        for(i=0;i<n;i++){
            map[*returnSize][i]=(char*)malloc(sizeof(char)*(n+1));
            for(j=0;j<n;j++){
                if(flag[i]==j){
                    map[*returnSize][i][j]='Q';
                }else{
                    map[*returnSize][i][j]='.';
                }
            }
            map[*returnSize][i][j]='\0';
        }//填充Q和‘.’
        (*returnColumnSizes)[*returnSize]=n;
        (*returnSize)++;
        return;
    }
   for(j=0;j<n;j++){
        if(isvalid(flag,cur,j)){ //这里判断为1时 执行isvalid判断为不可用,回溯执行backtracking
            flag[cur]=j;
            backtracking(n,cur+1,flag,map,returnSize,returnColumnSizes);
        }
    }
    return;
}

char *** solveNQueens(int n, int* returnSize, int** returnColumnSizes){
    int * flag=(int*)malloc(sizeof(int)*(n+1));
    int i;
    char ***map=(char***)malloc(sizeof(char**)*1000);
    (*returnColumnSizes) = (int*)malloc(sizeof(int)*1000);
    memset(flag,0,sizeof(flag));
    *returnSize=0;
    backtracking(n,0,flag,map,returnSize,returnColumnSizes);
    return map;
}

延伸出的 n皇后 II
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

int totalNQueens(int n){
    int * flag=(int*)malloc(sizeof(int)*(n+1));
    int number=0;
    memset(flag,0,sizeof(flag));
    int *returnSize=(int*)malloc(sizeof(int));
    *returnSize=0;
    backtracking(n,0,flag,returnSize);
    number=*returnSize;
    return number;

修改最后返回的函数即完成(另外去除填充Q和'.'的部分)

标签:...,..,returnSize,int,51,II,flag,皇后
From: https://www.cnblogs.com/noobwei/p/17532465.html

相关文章

  • 4.3 Recurrent Neural Network (RNN) II
    1.RNN怎么学习1.1LossFunction  如果要做learning的话,你要定义一个costfunction来evaluate你的model是好还是不好,选一个parameter要让你的loss最小.那在RecurrentNeuralNetwork里面,你会怎么定义这个loss呢,下面我们先不写算式,先直接举个例子.  如下图所示,这是一......
  • 【851】空间相关性计算
    参考:皮尔逊相关系数(PearsonCorrelationCoefficient)参考:空间相关系数  通过计算每个象元的相关性,然后把整个象元再描绘出来,就形成一幅地图!参考:A&C分区|两变量相关系数空间分布图(空间演变及影响因子分析第三集:空间相关性分析)参考:Python气象数据处理与绘图:空间图的相关系计......
  • 软件IIC SDA输入输出
    SDA输入输出模式改变方式一  SCL线可以配置推挽输出,开漏输出(有上拉电压存在)都可,因为不用兼具输入扫描功能;SDA线必须配置开漏输出,电路上要外加上拉电阻,因为要兼具输入扫描功能, 方式二 对应的gpio口配置代码的改变#defineSCCB_SDA_IN(){GPIOG->CRH&=0X......
  • 光学成像系统 Part III - BRDF测试数据使用 (二)
    一、BRDF实验数据使用方法1.数据集-下载I.数据集格式(AnisotropicBRDFDataFileFormat)解压后的数据集以.dat尾缀结束,文件包括了64Bytes的文件头,用来表示文件中数据的维度,存储格式等信息,在表头之后的便是对应的数据值,具体如下所示:\[3(RGB)\timesdim[0]\timesdim......
  • 代码随想录算法训练营第二十四天| 491.递增子序列 46.全排列 47.全排列 II
     491.递增子序列 此题的难点:1,前提需要保留原有顺序2,保证递增3,保证去重注意:去重一定要有set的同时保证有顺序代码:1voidfindSubsequences_trackBack(vector<int>&nums,intstartIndex,vector<int>&path,vector<vector<int>>&result)2{3if(path.size(......
  • 123. 买卖股票的最佳时机 III
    1.题目读题  考查点 2.解法思路 有两种解法动态规划双指针代码逻辑 具体实现 动态规划思路动态规划的思路是这样的:我们可以把问题分解成多个子问题,每个子问题都是在某一天结束时,完成了多少次交易,手上是否持有股票,以及此时的最大利润是多少。我们......
  • 【模板分享】我在51CTO博客的第一篇博文
    发文入口:https://blog.51cto.com/activity-first-publish这是我在51CTO博客的第一篇博文。一、自我介绍(不知道怎么介绍?你肯定有求职简历吧?可以参考简历,描述你的技术专长和项目经验!)二、技术分享(可以分享1-3个实用的代码片段,或技术干货。)三、立一个flag!(可以从学习、工作、生活等方面......
  • 全志 Tina Linux RISC-V E907核心开发指南支持百问网V85x系列开发板100ask-v853-pro v
    编写目的:介绍v85X上E907的启动环境和AMP的环境搭建。使用范围:全志V85X系列芯片环境A7SDK:TinaE907SDK:melis4SDK快捷命令说明这里主要介绍几个下文会用到的命令,并不会介绍全部命令,如果想了解全部命令,可以在lunch方案后使用hmm打印出所有tina提供的快捷命令。ckernel,mke......
  • 503. 下一个更大元素 II
    labuladong题解难度中等824给定一个循环数组 nums ( nums[nums.length-1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的......
  • 让IIS支持.NET Web Api PUT和DELETE请求
    前言    有很长一段时间没有使用过IIS来托管应用了,今天用IIS来托管一个比较老的.NETFx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的,关键是POST和GET请求都是正常的,只有PUT和DELETE请求是有问题的。经过一番思考忽然想起来了IIS默认情况下拒绝处理PUT和DELETE......