HDU - 2553 N皇后问题
来源:互联网 发布:c语言中取反 编辑:程序博客网 时间:2024/06/06 01:40
Description
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
Output
Sample Input
1850
Sample Output
19210
Source
采用深度搜索的方式进行搜索,每次放置一个皇后是都得用check()函数进行判断,要是可以放下去,则皇后数目加一,继续进行深度搜索
这里采用的不是传统的二维数组,而是一位数组 queen[n] = i;其中n是行的数目,也是皇后的数目,i是列的数目
这题还有一个特点是测试的数据特别多,因此如果不将第一次获得的数据保存在数组中的话,下次则还要重新计算,绝对会超时
// 31ms 152kb
#include <stdio.h>
#include <stdlib.h>
int queen[11], sum=0;
int method[11]={0};
int m;
int check(int n){
int i;
for(i = 0; i < n; i++){
//列和对角线的检查
if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)){
return 1;
}
}
return 0;
}
void put(int n){
int i;
for(i = 0; i < m; i++){
queen[n] = i;
if(!check(n)){
if(n == m - 1){
sum++;
}
else{
put(n + 1);
}
}
}
}
int main(){
while(scanf("%d",&m),m!=0){
sum=0;
if(method[m]!=0)
printf("%d\n",method[m]);
else{
put(0);
method[m]=sum;
printf("%d\n", sum);
}
}
return 0;
}
- HDU 2553 N皇后问题
- HDU 2553 N皇后问题
- HDU 2553-N皇后问题
- hdu 2553 N皇后问题
- HDU-2553-N皇后问题
- Hdu 2553 N皇后问题
- hdu 2553 N皇后问题
- hdu 2553 N皇后问题
- HDU 2553 N皇后问题
- HDU--2553 -- N皇后问题
- hdu-2553--N皇后问题
- 2553--Hdu--N皇后问题
- N皇后问题 hdu 2553
- HDU 2553 N皇后问题
- hdu 2553 n皇后问题
- HDU 2553 N皇后问题
- hdu-2553-N皇后问题
- HDU-2553-N皇后问题
- 如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第二部分
- NSDictionary、NSMutableDictionary的基本用法
- Spark Graphx 构建graph和aggregateMessages聚合消息
- 乐点 Android SDK 积分墙开发者文档
- Fixing the Great Wall
- HDU - 2553 N皇后问题
- LeetCode 题解(167): Sqrt(x)
- 黑马程序员——OC笔记之购票系统应用实践
- 最小生成树之PRIM-O(n^2)
- ViewHolder到底用什么修饰?static?final?static final?
- easy ui datagrid的高度自适应
- 1089. Insert or Merge (25)
- java.sql.SQLException: 无效的列类型 PreparedStatement.setObject
- wpf中ist<T>与ObservableCollection<T>的用法区别