首页 > 其他分享 >n皇后

n皇后

时间:2024-01-21 18:46:13浏览次数:15  
标签:count index generateP int maxn hashtable 皇后

//#include
//#include
//using namespace std;
//
//const int maxn = 11;
//int n,p[maxn],hashtable[maxn]={false},count=0;
//
//void generateP(int index){
// if(index == n+1){
// bool flag=true;
// for(int i=1;i<=n;i++)
// for(int j=i+1;j<=n;j++)
// if(abs(i-j)==abs(p[i]-p[j]))
// flag=false;
//
// if(flag) count++;
// return;
// }
//
// for(int i=1;i<=n;i++){
// if(!hashtable[i]){
// p[index]=i;
// hashtable[i]=true;
// generateP(index+1);
// hashtable[i]=false;
// }
// }
//}
//
//int main(){
// scanf("%d",&n);
// generateP(1);
// printf("%d",count);
// return 0;
//}

include

include

using namespace std;

const int maxn=10010;
int n,p[maxn],hashtable[maxn]={false},count=0;

void generateP(int index){
if(index == n+1){
count++;
return;
}

for(int i=1;i<=n;i++){
	if(!hashtable[i]){
		bool flag=true;
		for(int pre=1;pre<index;pre++){
			if(abs(index-pre)==abs(i-p[pre])){
				flag=false;
				break;
			}

}
if(flag){
p[index]=i;
hashtable[i]=true;
generateP(index+1);
hashtable[i]=false;
}
}
}
}

int main(){
scanf("%d",&n);
generateP(1);
printf("%d",count);
return 0;
}

标签:count,index,generateP,int,maxn,hashtable,皇后
From: https://www.cnblogs.com/chatBlog/p/17978139

相关文章

  • N皇后问题
    问题描述:实现n皇后问题,要求利用概率算法和回溯法;只需找出一组解即可。程序设计:1#include<iostream>2#include<math.h>3#include<stdlib.h>4#include<ctime>5usingnamespacestd;6intx[100],q[100];//q[i]=n表示回溯解,x表示概率解7intn,cnt=0......
  • 算法学习Day30 n皇后
    Day30n皇后ByHQWQF2024/01/16笔记51.N皇后按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题研究的是如何将n 个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的 n皇后问题的解决方......
  • 51/52. N 皇后Ⅰ/Ⅱ(难)
    目录51.题目题解:回溯52题目题解:回溯优化51.题目按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的n皇后问题的解决方案......
  • 算法分析-回溯算法-求解N皇后问题
    一.题目需求n皇后问题是一道比较经典的算法题。它研究的是将n个皇后放置在一个n×n的棋盘上,使皇后彼此之间不相互攻击。即任意两个皇后都不能处于同一行、同一列或同一斜线上。二.算法思想1.构建棋盘可以用一个n×n列表来表示棋盘,设皇后所在的位置为board[i],i代表行,board[......
  • 7-7 n皇后
    7-7n皇后n皇后问题是指将n个皇后放在n×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。输入格式:共一行,包含整数n(1≤n≤12)。输出格式:给出所有可能摆放情况的种数,结尾无空格换行。输入样例:在这里给出一组输......
  • python回溯法n皇后问题
    classSolution:defsolveNQueens(self,n:int):defgenerateBoard():board=list()foriinrange(n):row[queens[i]]="Q"board.append("".join(row))......
  • n皇后问题
    N皇后问题是指在n*n的棋盘上要摆n个皇后,要求:任何两个皇后不同行,不同列也不在同一条斜线上,求给一个整数n,返回n皇后的摆法数。数据范围:1≤ n ≤9#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=20;intn;......
  • AcWing 842. 排列数字 && AcWing 843. n-皇后问题
    842.排列数字(全排列)题面:给定一个整数\(n\),将数字\(1∼n\)排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。#include<iostream>usingnamespacestd;constintN=10;intpath[N];//保存序列boolst[N];//数字是否被用过,bool类型的全局变......
  • 去重N皇后
    题目:将上下对称、左右对称棋局、主副对角线对称棋局和旋转后重复视为重复,则要求输出去重后的N皇后问题的棋盘布局这道题是一道作业题,我都惊到了,一向弱智的作业题中竟然冒出一道这样的题,这题最起码橙黄之间的难度,标个黄应该也没什么问题。我竟然写了一百多行代码,在不影响可读性的......
  • N皇后非递归解法
    #include<iostream>#include<cmath>usingnamespacestd;#defineN8intq[N+1];intcheck(inthang){ //该方法判断hang所在列是否合法 for(inti=1;i<hang;i++){ if(q[hang]==q[i]||abs(hang-i)==abs(q[hang]-q[i])){ return0; } } return1;}//N皇后的非递归解法voidqu......