//一维数组解法(注释详尽)
//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. JavaScript 与 Java、PHP 的比较

    网站开发的实践从设计方面开始,包括客户端编程语言.大体上说,在网页设计中使用了三种语言:HTML,CSS和Java.自从网站发明以来,HTML和CSS已经成为网页设计的基础,但是Java被用于添加网站 ...

  2. return super(ParamValueInline,self).formfield_for_foreignkey(db_field,request,**kwargs)自己返回自己的父类

    作者:刘强胜链接:https://www.zhihu.com/question/30361435/answer/83940591来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. 【Swift】 - 函数(Functions)总结 - 比较 与 C# 的异同

    1.0 函数的定义与调用( Defining and Calling Functions ) 习惯了C#了语法,看到下面的这样定义输入参数实在感到非常别扭,func 有点 Javascript的感觉, ...

  4. 在PHP中对查询出得数据库数据进行json编码

    select.php <?php $con = mysql_connect("localhost","Thh","920920thh" ...

  5. 2017中国大学生程序设计竞赛 - 女生专场 Happy Necklace(递推+矩阵快速幂)

    Happy Necklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  6. JavaWeb---总结(十九)Session机制

    一.术语session session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可 ...

  7. mysql日期类型

    日期类型 DATE TIME DATETIME TIMESTAMP YEAR 作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等 YEAR YYYY(1901/2155) DAT ...

  8. SQL Server 2008怎么自动备份数据库

    在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你 ...

  9. 搭建了一个在线的机器学习webshell检测RESTful API

    # 地址: http://118.190.147.89:5001/ 如果不能访问,联系sevck#jdsec.com # 说明: 简单的基于机器学习检测webshell:目前只支持php的检测 #使用 ...

  10. 使用 Ansible 管理 MySQL 复制

    Ansible 是一个新兴的 IT 自动化工具.本文将介绍如何通过 Ansible 配置及管理 MySQL 主.从复制环境,实现部署过程自动化,体验 Ansible 简单快速带来的快感. 简介: An ...