N皇后问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6493    Accepted Submission(s): 2951

Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

 
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
 
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
 
Sample Input
1
8
5
0
 
Sample Output
1
92
10
 
Author
cgf
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  2614 1258 1426 1175 1067 
 
 //31MS    256K    993 B    C++
//经典N皇后问题 深搜解法
#include<stdio.h>
#include<string.h>
int cnt,n;
int q[][];
int Judge(int x,int y)
{
for(int i=;i<n;i++) if(q[x][i] && i!=y) return ;
for(int i=;i<n;i++) if(q[i][y] && i!=x) return ;
for(int i=x+,j=y+;i<n && j<n;i++,j++)
if(q[i][j]) return ;
for(int i=x-,j=y-;i>= && j>=;i--,j--)
if(q[i][j]) return ;
for(int i=x+,j=y-;i<n && j>=;i++,j--)
if(q[i][j]) return ;
for(int i=x-,j=y+;i>= && j<n;i--,j++)
if(q[i][j]) return ;
return ;
}
void dfs(int c)
{
if(c==n){ cnt++;return;}
for(int i=;i<n;i++)
if(Judge(i,c)){
q[i][c]=;
dfs(c+);
q[i][c]=;
}
}
int main(void)
{
int a[]={};//不打表会超时
for(int i=;i<;i++){
n=i;
cnt=;
memset(q,,sizeof(q));
dfs();
a[i]=cnt;
}
while(scanf("%d",&n)!=EOF && n)
{
printf("%d\n",a[n]);
}
return ;
}

给出一个高效的位运算求法:

 //15MS    208K    704 B    G++
#include<stdio.h>
int ans[];
int sum;
int upperlim;
void dfs(int row,int ld,int rd) //某行中纵列不可取,左右对角线不可取的限制条件
{
int pos,p;
if(row!=upperlim){
pos=upperlim&(~(row|ld|rd)); //取出可以放的位置
while(pos){
p=pos&(~pos+); //取pos最左边的1
pos=pos-p; //减去可取的
dfs(row|p,(ld|p)<<,(rd|p)>>); //深搜
}
}else sum++; //搜出来后总数+1
}
int main(void)
{
for(int i=;i<;i++){
sum=;
upperlim=(<<i)-; //i个1
dfs(,,);
ans[i]=sum;
}
int n;
while(scanf("%d",&n),n)
{
printf("%d\n",ans[n]);
}
return ;
}

最新文章

  1. Bellman-Ford 单源最短路径算法
  2. MVC5 DBContext.Database.SqlQuery获取对象集合到ViewModel集合中(可以利用这个方法给作为前台视图页cshtml页面的@model 源)
  3. [MacOS] 终端使用ssh时,中文乱码问题处理
  4. Vs2012(Vs2013) 编译 64位 Qt (动态库), 并使用自编译Qt建立工程(悲催经历)。(含遗留问题)
  5. ini文件操作
  6. 如何安装Ecshop for linux
  7. AxureRP8实战手册(基础11-20)
  8. js词法作用域规则
  9. 使用UpdatePanel 页面脚本不起作用
  10. ASP.NET MVC3细嚼慢咽---(3)Razor视图语法
  11. Android免坑指南(一)Sugar与SQLite
  12. 主机访问 虚拟机web注意事项
  13. 谈谈IT人的发展[转载]
  14. docker mac 安装并初始化GO环境
  15. 实现Echarts折线图的虚实转换
  16. 浅谈SystemClock 和Thead的区别和联系
  17. springboot 学习之路 22 (读取自定义文件)
  18. Redux 和 ngrx 创建更佳的 Angular 2
  19. camera按键采集图像及waitKey的用法
  20. javascript中让你捉摸不定的this

热门文章

  1. Android Studio项目中三种依赖的添加方式
  2. Erwin 简单使用
  3. Angular/cli的安装
  4. C#把日期转化成星期
  5. bootloader svc 模式
  6. 复用传统C/S架构系统,升级成‘伪’B/S架构设计
  7. oauth2.0协议接口-第一篇-api逻辑
  8. php-安装与配置-未完待续2
  9. strak组件(8):基本增删改查实现及应用和排序
  10. ERROR 1005 (HY000): Can't create table 'students.#sql-d9