N皇后问题

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

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
 
Author
cgf
 
Source
知识点:DFS 回溯法(可见http://www.cnblogs.com/ZP-Better/p/4649694.html)
题意:见题目描述(obviously)
思路:DFS 先找状态(目前所在第几行,目前所在第几列,目前已经放置的皇后数量)扩展方式:从第一列到最后一列搜索到合适的位置,最终状态:目前放置的皇后数量等于题目所要求的皇后数量。
重点:1.如何判断2个皇后不允许不允许处在与棋盘边框成45角的斜线上。将棋盘看成坐标图,row1+column1=row2+column2=c(x1+y1=x2+y2=c) or row1-column1=row2-column2=c(x1-y1=x2-y2=c)来判断2个皇后是否在棋盘边框成45角的斜线上。为了满足这个条件还需要将目前这个点与已经放置过的点(需要遍历前面的点)判断才满足。
        2.这题卡时间,又由于数字较小所以要打表将这10种情况用数组存下。
 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,cnt;
int vis[];//标记数组
int picture[];//用下标来表示行号,自身存储列号。
bool judge(int r,int r2,int c2)//判断2个皇后是否在棋盘边框成45角的斜线上
{
for(int i=;i<=r;i++)//遍历已经放置皇后的点
{
if(i+picture[i]==r2+c2||i-picture[i]==r2-c2)
return false;
}
return true;
}
void dfs(int row,int column,int num)
{
if(num==n)
{
cnt++;
return;
}
for(int i=;i<n;i++)
if(!vis[i]&&judge(row,row+,i))
{
picture[row+]=i;
//printf("%dorz%dorz%d\n",row+1,i,num);
vis[i]=;
dfs(row+,i,num+);
vis[i]=;
}
}
int main()
{
while(~scanf("%d",&n))
{
cnt=;
memset(vis,,sizeof(vis));
memset(picture,,sizeof(picture));
for(int i=;i<n;i++)
{
vis[i]=;
picture[]=i;
dfs(,i,);
vis[i]=;//回溯法:还原标记
}
printf("%d\n",cnt);
}
return ;
}

通过上面代码得到10种情况答案。下面是AC代码

 #include <cstdio>
#include <iostream>
int a[]={,,,,,,,,,,};
int n;
int main()
{
while(~scanf("%d",&n))
{if(n==)
break;
printf("%d\n",a[n]);}
return ;
}

HDOJ2553-N皇后问题(DFS)的更多相关文章

  1. 八皇后(dfs+回溯)

    重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...

  2. n皇后问题<dfs>

    n皇后问题指的是: n*n的国际象棋棋盘上摆放n个皇后,使其不能互相攻击, 即任意两个皇后都不能处于同一行.同一列或同一斜线上, 问有多少种摆法. 和一般n皇后问题不同的是,现在棋盘上有可能已经放了一 ...

  3. 八皇后问题 dfs/递归

    #include <bits/stdc++.h> using namespace std; const int maxn = 55; int ans=0; int vis_Q[maxn]; ...

  4. 蓝桥杯 算法提高 8皇后·改 -- DFS 回溯

      算法提高 8皇后·改   时间限制:1.0s   内存限制:256.0MB      问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8 ...

  5. HDU2553 N皇后问题——DFS

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. hdu2553N皇后问题(dfs,八皇后)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. n皇后问题--DFS输出棋盘

    N皇后问题 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对 ...

  8. hdu 2553 N皇后问题 (DFS)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. HDOJ2553(2N皇后问题)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 烟雾检测笔记1--《Video-based smoke detection with histogram sequence of LBP and LBPV pyramids》解析、实现

    基于HEP(histograms of equivalent patterns[1])框架下的特征具有良好的纹理分类效果,LBP(local binary patterns[2])属于HEP框架下最常 ...

  2. poj2262

                                                                                                   Goldb ...

  3. hdu 3711 Binary Number(暴力 模拟)

    Problem Description For non-negative integers x and y, f(x, y) , )=,f(, )=, f(, )=. Now given sets o ...

  4. 后台数据导出为Excel

    数据导出的方法如下: 一.下载office的类库:microsoft.office.interop.excel.zip 根据电脑安装的office版本选择引入相应的类库,office2007选择12. ...

  5. linux学习方法之二

    相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 安装php扩展 ...

  6. Afianl加载网络图片(延续)

    上一页"已经谈到了如何使用Afianl网络负载的图片和下载文件,本文将继续介绍使用Afinal使用网络负载图片,主绑定listview采用: 看效果图: listview在滑动过程中没用明显 ...

  7. Android编译过程详解(三)

    前面两节讲解了自定义Android编译项和创建Product产品配置文件,除了编译和定义产品相关环境变量外,还需要定义Board相关环境变量. 1. build/core/config.mk 109 ...

  8. ASP.NET母版与内容页相对路径的问题

    1. 图片问题 非常好解决 <img runat="server" src="~/images/ad468x60.gif" alt="" ...

  9. css之浏览器初始化方案

    HTML, body, div, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, blockquote,pre, form, fieldset, ...

  10. MVVM模式

    MVVM的最大缺点貌似是,报错后不好找, 在安卓6.0的时候出现了一个工具叫做databinding,其中呢主要是用来帮助实现MVVM模式的快速开发   在使用databinding的时候我们需要做的 ...