HDU 2553 n皇后问题(回溯法)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
Output
Sample Input
8
5
0
Sample Output
92
10
按行向量递增搜索,一直到最后一个行向量结束时得到一种放置方法,用b[]保存摆法。
#include<stdio.h>
#include<cstring>
int vis[][];
int c[];
int cur,tot;
int n;
void search(int cur)
{
if(cur==n)
tot++;
else for(int i=; i<n; i++)
{
if(!vis[][i]&&!vis[][cur+i]&&!vis[][cur-i+n])
{
c[cur]=i;
vis[][i]=vis[][cur+i]=vis[][cur-i+n]=;
search(cur+);
vis[][i]=vis[][cur+i]=vis[][cur-i+n]=;
}
}
} int main()
{
int b[];
for(n=; n<=; n++)
{
memset(vis,,sizeof(vis));
tot=;
search();
b[n]=tot;
}
int bn;
while(scanf("%d",&bn)&&bn)
{
printf("%d\n",b[bn]);
}
return ;
}
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=;
int b[maxn],a[maxn],sum,n; void dfs(int cur)
{
if(cur == n+)//递归边界,就有一种摆法
sum++;
else
for(int j = ; j <=n; j++)
{
int ok=;
a[cur] = j;//尝试把第cur行的皇后放在第j列
for(int i = ; i<cur; i++) //检查是否和前面的皇后冲突
if(a[i] == a[cur] || abs(i - cur) == abs(a[i] - a[cur]))
{
ok=;
break;
}
if(ok)
dfs(cur+);//如果合法,继续递归
}
} int main()
{
for(int i = ; i <=maxn; i++)
{
sum = ;
n= i;
dfs();
b[i] = sum;
}
while(cin>>n && n)
cout<<b[n]<<endl;
return ;
}
#include <cstdio>
main()
{
int n,a[]={,,,,,,,,,,,,};
while(scanf("%d",&n))
printf("%d\n",a[n]);
}
HDU 2553 n皇后问题(回溯法)的更多相关文章
- [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 2553 N皇后问题(回溯 + 剪枝)
本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...
- 八皇后问题-回溯法(MATLAB)
原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...
- 算法入门经典-第七章 例题7-4-1 拓展 n皇后问题 回溯法
实际上回溯法有暴力破解的意思在里面,解决一个问题,一路走到底,路无法通,返回寻找另 一条路. 回溯法可以解决很多的问题,如:N皇后问题和迷宫问题. 一.概念 回溯算法实际类似枚举的搜索尝试过程,主 ...
- HDU 1016 Prime Ring Problem (回溯法)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 2553 N皇后问题 (DFS_回溯)
Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即随意2个皇后不同意处在同一排,同一列,也不同意处在与棋盘边框成45角的斜线上. 你的任务是.对于给定的N ...
- HDU 2553(N皇后)(DFS)
http://acm.hdu.edu.cn/showproblem.php?pid=2553 i表示行,map[i]表示列,然后用DFS遍历回溯 可以参考这篇文章: http://blog.csdn. ...
- hdu 2553 N皇后问题
回溯. 一个主对角线,副对角线的技巧 //vis[0][i]表示第i列有没有皇后 vis[1][cur+i]表示副对角线 vis[2][cur-i+n]表示主对角线 #include <cstd ...
- N皇后问题--回溯法
1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每 ...
随机推荐
- Ignoring a Test
如果我们不想让某个测试失败,我们仅仅想要忽略它,那么我们可以暂时的disable它. 有三种方法来忽略一个测试: 把方法注释掉 删除 @Test 注释 增加 @Ignore注释: @Ignore([i ...
- Solr和ES对比
Solr与ES(ElasticSearch)对比 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分 ...
- shell 二元操作符 =~
17:14 [logc@a005.client.hadoop.qingdao.youku]$ a=1 17:14 [logc@a005.client.hadoop.qingdao.youku]$ if ...
- servelt乱码问题(tomcat服务端编码为ISO-8859-1)
Post的编码决定机制: <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...
- 深入了解JavaScript中的for循环
在ECMAScript5中,有三种for循环,分别是: 简单for循环 for-in forEach 在ES6中,新增了一种循环 for-of 简单for循环 const arr = [1, 2, 3 ...
- Java 实现字符串反转
方法一: public class StringReverse { public void swap(char[] arr, int begin, int end) { while(begin < ...
- POJ 2075 Tangled in Cables (c++/java)
http://poj.org/problem?id=2075 题目大意: 给你一些人名,然后给你n条连接这些人名所拥有的房子的路,求用最小的代价求连接这些房子的花费是否满足要求. 思路: 昨天20分钟 ...
- rsyslog 报 WARNING: rsyslogd is running in compatibility mode.
[root@localhost log]# uname -a Linux localhost.localdomain 2.6.32 #1 SMP Sun Sep 20 18:58:21 PDT 2 ...
- Python自动化之5种session类型
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session Django默认支持Se ...
- Python之路,Day26-----暂无正在更新中
Python之路,Day26-----暂无正在更新中