博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
N皇后问题
阅读量:6908 次
发布时间:2019-06-27

本文共 997 字,大约阅读时间需要 3 分钟。

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

Input共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。Output共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。Sample Input

1850

Sample Output

19210 分析:搜索,每次检查一下该列是否已经放了皇后,同时检查主副对角线,主副对角线参考了别人数学的处理方法,即:在对角线上的两点坐标满足横纵坐标之差的绝对值相等!我刚开始是每一次输入一个查询的数据就搜索一次,然后交上去的代码超时了,后来用自己写的代码输出结果打了个表就AC了,参考了别人的博客,发现他们用的记忆化搜索的方式,就避免了重复搜索!我还是太菜啊! AC代码:
#include
#include
#include
#include
#include
#include
#define N 15using namespace std;int ans;int Queen[N];int n;void dfs(int k){ if (k==n+1) { ans++; return ; } int i,j; for ( i=1;i<=n;i++) { for (j=1;j
=k) { Queen[k]=i; dfs(k+1); } }}int sum[N];int main(){ for (int i=1;i<=10;i++) { n=i; ans=0; dfs(1); sum[i]=ans; } while (cin>>n&&n!=0) { cout << sum[n] << endl; } return 0;}
 

 

 

转载于:https://www.cnblogs.com/lisijie/p/8366738.html

你可能感兴趣的文章
javascript prototype
查看>>
Linux 上的基础网络设备详解
查看>>
到底是否应该重复造轮子
查看>>
c 从语言中的内存管理
查看>>
Linux中ping命令
查看>>
oracle数据库导入导出命令!
查看>>
zoj 1610 Count the Colors 线段树区间更新/暴力
查看>>
android解决内存溢出的问题(没有从根本上解决)
查看>>
我心中想念那位偷吃玉米的老朋友
查看>>
“Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”
查看>>
Kryo 为什么比 Hessian 快
查看>>
使用svn hooks 脚本post-commit时遇到的故障
查看>>
Android.mk 文件语法详解
查看>>
ThreadPool.QueueUserWorkItem的性能问题
查看>>
解读ASP.NET 5 & MVC6系列(11):Routing路由
查看>>
机器学习算法一览图
查看>>
识别出脸部以及给脸部打马赛克
查看>>
[转载]git 忽略某些文件
查看>>
jQuery 效果 - 隐藏和显示
查看>>
正则表达式的使用
查看>>