52.N-Queens II (n皇后问题,返回可能数,回溯,递归实现)

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number ofdistinct solutions.

HideTags

Backtracking

#pragma once
#include<iostream>
using namespace std;

//判断当钱index中存储的局面是否合规,index中前col列有皇后(0至col-1)
int isOK(int * index, int col)
{
	for (int i = 0; i < col; i++)
		for (int j = 0; j < i; j++)
			if (index[i] == index[j] || abs(i - j) == abs(index[i] - index[j]))
				return false;
	return true;
}

//返回n皇后问题中,前col列的皇后按照index就位之后的可能性数目
int go(int* index, int n, int col)
{
	if (col == n)//前n列就位,到头了
		return 1;//注意!!!此处应为1!!!
	int count = 0;//记录可能数
	for (int row = 0; row < n; row++)//试着在col列的0至n-1行放置皇后
	{
		index[col] = row;
		if (isOK(index, col + 1))
			count += go(index, n, col + 1);
	}
	return count;
}

int totalNQueens(int n) {
	int *index = new int[n];
	return go(index, n, 0);//当钱有0个皇后就位之后的可能,按列来
}

void main()
{
	//int a[] = { 1, 3, 5, 7, 2, 0, 6, 4 };
	//cout << isOK(a, 8) << endl;
	cout << totalNQueens(9) << endl;
	system("pause");
}
时间: 2024-10-28 11:27:21

52.N-Queens II (n皇后问题,返回可能数,回溯,递归实现)的相关文章

lintcode 中等题:N Queens II N皇后问题 II

题目: N皇后问题 II 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局. 样例 比如n=4,存在2种解决方案 解题: 和上一题差不多,这里只是求数量,这个题目定义全局变量,递归的时候才能保存结果,参考程序 java程序: class Solution { /** * Calculate the total number of distinct N-Queen solutions. * @param n: The number of queens. * @return:

[LeetCode 51&amp;52] N-Queens I &amp; II (N皇后问题)

题目链接:n-queens import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all dist

jQuery的ajax调用webservice返回XML数据传参错误

jQuery的ajax调用webservice返回XML数据传参错误: 有时候使用jquery的ajax调用带有参数的webservice返回XML格式输出的时候,会出现传参错误,当然错误的原因可能是多种多样的,下面就简单介绍一种. 一.错误代码: 1.ajax代码: $.ajax({ type:"post", url:"_service.asmx/getDataFromATable", data:" { tablename: temp }",

DB2 SQL查询结果集自动编号、返回条数范围控制研究

DB2 SQL查询结果集自动编号.返回条数范围控制研究 摘要: DB2 SQL语句实现查询的记录自动编号.并根据编号进一步实现记录范围控制.分页查询. 环境: IBM DB2 Universal V9.1 Windows XP Professional 要求:写一个SQL语句,在查询结果中要显示出记录序号,这个序号是是根据记录顺序自动生成的. 测试初始化DB2 SQL脚本: drop table t_test; create table t_test (bs        bigint     

返回一组数中最大的K个(JS实现)

第一次见到类似题目大约是在六年前吧.一道简单的ACM题,自己费半天劲用土方法得出结果,跟别人用堆排序求得结果的时间效率相差数倍,使得笔者第一次深切领略到算法的魅力.六年之后,再一次被人问到这道题,"堆排序"瞬间蹦入脑海. 不同的是,当时玩C,现在玩Java和JS,最熟的就是JS了,于是用JS把算法写了出来: function topKMaxOfArr(k, arr){ function swap(a, b){ var t = arr[a]; arr[a] = arr[b]; arr[b

注意sizeof()返回的数无符号数,有符号数遇到无符号数时变成无符号数

预测一下这道题的结果,注意unsigned与signed #include<iostream> #include<stdio.h> using namespace std; int arr[]={1,2,3,4,5}; int main(){ for(int i=-1;i<sizeof(arr)/sizeof(arr[0]) - 1;i++) cout<<arr[i+1]<<endl; } sizeof()返回的值是无符号数,有符号数遇到无符号数变成无

优化sql,返回行数少情况下,NL比hash快好多

sql如下 select t.id, t.value, tt.sort as sortno from ENGINEERING_TYPE t left join ENGINEERING_TYPE tt on t.parentid = tt.id where t.delete_flag = 0 and t.hasson = 0 order by sortno, t.sort sql很简单,相当于自连接 ,返回行数12行,非常小,但是运行5s左右才出结果 看一下执行计划 可以看到,表与表之间走了has

十六进制高低位转换,返回十进制数

/** * 十六进制高低位转换,返回十进制数 * @param str * @return */ public static String decodeHexStringToDec(String str) { str =HighLowHex(spaceHex(str)); String value =new BigInteger(str, 16).toString(); return value; } /** * 十六进制数隔空位 * @param str * @return */ privat

20191030-带返回值的回溯算法Leetcode解数独

题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次. 空白格用 '.' 表示. 一个数独. 答案被标成红色. Note: 给定的数独序列只包含数字 1-9 和字符 '.' . 你可以假设给定的数独只有唯一解. 给定数独永远是 9x9 形式的. 输入格式: [["5","3",".&