queens 要求最优的算法最好是算的时间不要超过1s

inlin 2005-05-27 08:06:13
Queens

Time Limit: 1 Seconds Memory Limit: 32768 K

Total Submit:7 Accepted:1

--------------------------------------------------------------------------------

Description

You are to find the number of different combinations of placement of N queens on the NxN board. Every queen should NOT attack another (i.e. there should be no two figures sharing the same vertical, horizontal or diagonal.

Input

Number 1<=N<=14.
NOTE:Input is terminated when N=0.

Output

The number of valid combinations.

Sample Input


8
Sample Output


92



算到n=14就行了
...全文
60 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
inlin 2005-05-27
  • 打赏
  • 举报
回复
这是我的程序我还想再优化应该怎么改?


#include<iostream>
using namespace std;

const int n = 14 ;
const int n_sub = n - 1 ;
int queen[n] ;
bool row[n] ;
bool passive[2*n-1] ;
bool negative[2*n-1] ;

int main()
{
int cur = 0 ;
int n;
bool flag = false ;
queen[0] = -1 ;

cin>>n;
if(n==0) exit(0);
else
if(n>0&&n<=14)
{
int count = 0 ;
while(cur>=0)
{
while(cur>=0 && queen[cur]<n && !flag)
{
queen[cur]++ ;
if(queen[cur] >= n) {
queen[cur] = -1 ;
cur-- ;
if(cur>=0) {
row[queen[cur]] = false ;
passive[queen[cur] + cur] = false ;
negative[n_sub + cur - queen[cur]] = false ;
}
}
else {
if(row[queen[cur]] == false) {
flag = true ;
if( passive[queen[cur] + cur] == true || negative[n_sub + cur - queen[cur]] == true) {
flag = false ;
}
else
flag = true ;
if(flag) {
if(cur == n-1)
{

count++ ;
}
row[queen[cur]] = true ;
passive[queen[cur] + cur] = true ;
negative[n_sub + cur - queen[cur]] = true ;
cur++ ;
if(cur >= n) {
cur-- ;
row[queen[cur]] = false ;
passive[queen[cur] + cur] = false ;
negative[n_sub + cur - queen[cur]] = false ;
}
flag = false ;
}
}
}
}
}
cout<<count<<endl ;
}
return 0 ;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧