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.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每 ...
随机推荐
- JDK的下载和安装
检查 检查是否已经安装了JRE,可以在命令行窗口输入"java –version",如果能看到下图所示的信息,则说明已经安装: 检查是否已经安装了JDK,暂时没有发现什么高大上的方 ...
- 每一个web开发者都应该了解的HTTP/2
我认为每一个 web 开发者都应该对这个支撑了整个 Web 世界的 HTTP 协议有所了解,这样才能帮助你更好的完成开发任务.在这篇文章中,我将讨论什么是 HTTP,它是怎么产生的,它的地位,以及我们 ...
- 使用iScroll和photoswipe写手机浏览图片的插件的几点经验
首先,当我知道我得到一个任务需要写一个在手机上能浏览图片的插件时,我第一想到了iScroll.它的左右滑动,上下滑动的效果在安卓手机上也能让用户有良好的体验,自己写也能方便控制. 我的需求是,插件要能 ...
- Monkeyrunner入门示例
准备工作1.安装Android SDK2.熟悉MonkeyRunner的API(http://article.yeeyan.org/view/37503/164523)3.一部Android手机或模拟 ...
- [Javascript] Logging Pretty-Printing Tabular Data to the Console
Learn how to use console.table to render arrays and objects in a tabular format for easy scanning ov ...
- linux 获取系统屏幕分辨率
在Windows下可以使用GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取. 在Linux下可以使用XDisplayWi ...
- RabbitMQ和kafka从几个角度简单的对比--转
业界对于消息的传递有多种方案和产品,本文就比较有代表性的两个MQ(rabbitMQ,kafka)进行阐述和做简单的对比, 在应用场景方面, RabbitMQ,遵循AMQP协议,由内在高并发的erlan ...
- mac下使用brew安装svn javahl的问题
eclipse老提示javahl太久必须得1.8以上,以前不知道什么时候在/usr/bin装过1.7的svn. 1. 删除1.7的svn sudo rm /usr/bin/svn 2.使用brew安装 ...
- lvs+heartbeat搭建负载均衡高可用集群
[172.25.48.1]vm1.example.com [172.25.48.4]vm4.example.com 集群依赖软件:
- checkbox 全选/取消
<html><script language=javascript>function selectAll(){var a = document.getElementsByTag ...