//一维数组解法(注释详尽)
//num皇后可以表示第num列,然后枚举num皇后所在的行
//二维数组对角线转换为坐标的关系
#include<stdio.h>
#include<string.h>
int map[],hang[],ans[];
int n,cnt;
void Dfs(int num)
{
int i,j,k;
if(num>n)
{
cnt++;
return ;
}
for(i=;i<=n;i++)
{
map[num]=i;//第num的皇后在第num列i行
if(!hang[i])//枚举第i行是否可行
{
for(j=;j<num;j++)//枚举前num-1个皇后
{//num就代表列,map[num]就代表num所在的行
if(map[num]-num==map[j]-j||map[num]+num==map[j]+j)
break;
}
if(j==num)
{
hang[i]=;
Dfs(num+);
hang[i]=;
}
}
}
}
int main()
{
int m;
for(n=; n<; n++)
{
memset(hang,,sizeof(hang));
memset(map,,sizeof(map));
cnt=;
Dfs();
ans[n]=cnt;
}
while(scanf("%d",&m)!=EOF&&m)
{
printf("%d\n",ans[m]);
}
return ;
}

单纯二维坐标做法:

#include <stdio.h>
#include <string.h>
int count[];//n的最大范围是10,打表!
int k,cal;//k个大小的棋盘放的数目
int map[][];//棋盘
int dfs(int row,int column)
{
//最后一行也合适,放置数目加1
if(row>k)
{
cal++;
return ;
}
//判断同一列是否有棋子
for(int i=; i<row; i++)
if(map[i][column])
return ;
//判断左上45度是否有棋子
for(int i=row-,j=column-; i>&&j>; i--,j--)
if(map[i][j])
return ;
//判断右上45度是否有棋子
for(int i=row-,j=column+; i>&&j<=k; i--,j++)
if(map[i][j])
return ;
//都通过,该点合适并判断下一行
map[row][column]=;
for(int i=; i<=k; i++)
{
//当dfs(row+1,i,k)为1时,改行为最后一行,棋盘已放满
if(dfs(row+,i))
break;
}
map[row][column]=;
//该点判断完成,恢复后再去判断其他点
return ;
}
int main()
{
int n;
for(k=; k<=; k++)
{
memset(map,,sizeof(map));
cal=;
//count[k]=0;
for(int i=; i<=k; i++)
dfs(,i);
count[k]=cal;
}
while(scanf("%d",&n)!=EOF&&n)
printf("%d\n",count[n]);
return ;
}

hdu 2553 N皇后问题(一维数组详尽解释)的更多相关文章

  1. hdu 2553 N皇后问题 (经典DFS)

    题目链接:点击链接 思路:用一维数组hang[num] = i,num表示第num行,i表示第i列,计算n = 1~10皇后的不同放置数量,然后打表 #include<stdio.h> # ...

  2. [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)     ...

  3. HDU 2553 N皇后问题(详细题解)

    这是一道深搜题目!问题的关键是在剪枝. 下面我们对问题进行分析: 1.一行只能放一个皇后,所以我们一旦确定此处可以放皇后,那么该行就只能放一个皇后,下面的就不要再搜了. 2.每一列只能放一个皇后,所以 ...

  4. HDU 2553(N皇后)(DFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=2553 i表示行,map[i]表示列,然后用DFS遍历回溯 可以参考这篇文章: http://blog.csdn. ...

  5. hdu 2553 N皇后问题

    回溯. 一个主对角线,副对角线的技巧 //vis[0][i]表示第i列有没有皇后 vis[1][cur+i]表示副对角线 vis[2][cur-i+n]表示主对角线 #include <cstd ...

  6. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  7. HDU 2553 N皇后问题(dfs)

    N皇后问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 在 ...

  8. [ An Ac a Day ^_^ ] hdu 2553 N皇后问题 搜索

    曾经想过一天一AC 坚持下来的确不容易额 (我是没坚持下来 尽量以后坚持…… 经典的N皇后问题 搜索的入门问题 学了这么久竟然一直没敲过 今天敲一下…… 这道题也不是很简单额 纯暴力就超时了 要打一下 ...

  9. hdu 2553 n皇后问题【DFS递归解法】

    <题目链接> 题目大意: Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45 ...

随机推荐

  1. 【spring源码学习】spring的IOC容器在初始化bean过程

    [一]初始化IOC的bean的时候Spring会执行的一些回调方法 (1)spring bean创建的前置处理 =>ApplicationContextAwareProcessor 在创建bea ...

  2. oracle11g,安装失败,提示找不到文件,win7 64位下报错

    提示: 未找到文件 E:\app\Administrator\product\11.2.0\dbhome_5\owb\external\oc4j_applications\applications\W ...

  3. elang和python互通的例子

    抄袭自http://www.erlangsir.com/2011/04/14/python-%E5%92%8Cerlang%E4%BA%92%E9%80%9A%E4%BE%8B%E5%AD%90/ t ...

  4. Git的其他一些使用案例

    按照格式输出提交号 作者 时间 git log --pretty=format:"%h %an %cd" --date=iso 获取所有远程的tag和他的commit sha1 g ...

  5. java使用sftp下载远程服务器文件

    使用的是springboot的项目,只是贴出主要配置与类,代码较长,可以先折叠: 参考:https://www.cnblogs.com/xyzq/p/7049369.html 操作工具类SftpUti ...

  6. 安装并配置工具以使用iOS进行构建

    Visual Studio 2015   Visual Studio文档的新家是docs.microsoft.com上的Visual Studio 2017文档 . 有关Visual Studio 2 ...

  7. java代码做repeat次运算,从键盘输入几个数,比最值

    总结:今天这个题目有点灵活,因为它不但要求输出结果,还要进行几次相同的输入,不退出循环 import java.util.Scanner; //从键盘一次输入更多的数,然后把每一次的数进行---可比较 ...

  8. 360良心制作fonts.useso.com

    我们的网站,经常会用到google的一些数据. 但在国内无法使用google, 360这个良心的企业,解决了这个问题. 把google替换成useso就可以了. 比如, <link href=& ...

  9. 阿里云OSS图片上传类

    1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...

  10. 搭建httpd服务

    实验环境:CentOS7 实验步骤: 安装httpd服务:yum -y install httpd 关闭SELinux:setenforce 0 禁用防火墙策略:iptables -F 启动httpd ...