N皇后问题

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

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
 

ps 不打表会超时

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int a[][];
int result[];
int n,cnt; int panduan(int x,int y)
{
int i,j;
for(i=;i<y;i++)
if(a[x][i])//如果同一行有被标记过的点
return ;
for( i=x-,j=y-;i>=&&j>=;i--,j--)//如果主对角线有被标记过的点
if(a[i][j])
return ;
for(i=x+,j=y-;i<n&&j>=;i++,j--)//副对角线
if(a[i][j])
return ;
return ;
} void dfs(int m)
{
if(m==n)//n是全局变量
cnt++;
for(int i=;i<n;i++)
{
if(a[i][m]==&&panduan(i,m))
{
a[i][m]=;
dfs(m+);
a[i][m]=;//回溯
}
}
} int main()
{
for(int i=;i<;i++)
{
cnt=;
n=i+;
memset(a,,sizeof(a));
dfs();
result[i]=cnt;
}
while(cin>>n&&n)
{
cout<<result[n-]<<endl;
}
return ;
}

最新文章

  1. FastReport4.6 组件安装
  2. Centos 7 安装LAMP环境
  3. startActivityForResult用法详解
  4. Java学习笔记之:Java Map集合
  5. Labview中局部变量和全局变量
  6. 手机变为电脑的摄像头,使像素高清起来-使用DroidCam
  7. Activity---Fragment---listView的实现
  8. 文件操作IO流
  9. 发展,需求驱动 &amp;#183; 一间 所见即所得
  10. 【渗透笔记】拿下某小H网的全过程
  11. Docker(二):Docker镜像使用
  12. ES6 对象的扩展(下)
  13. iOS中的NSURLProtocol
  14. Ubuntu下安装Texmaker的问题与解决方案
  15. JAVA WEB快速入门之环境搭建
  16. QT连接postgreSQL
  17. P1156 垃圾陷阱 DP
  18. kivy 使用webview加载网页
  19. Leetcode 949. 给定数字能组成的最大时间
  20. Java基础知识学习笔记(一)

热门文章

  1. Android studio导入svn工程
  2. 在发送intent启动activity之前判断是否有activity接收
  3. loader的简单使用过程分析
  4. PHP的count(数组)和strlen(字符串)的内部实现
  5. 杭电acm 1076题
  6. Android 中的菜单 OptionsMenu的简单应用
  7. tomcat8.0的下载安装配置
  8. p3634 [APIO2012]守卫
  9. 树莓派研究笔记(1)-- 安装Mono
  10. Netty服务端的业务流程分析