1. //一维数组解法(注释详尽)
    //num皇后可以表示第num列,然后枚举num皇后所在的行
    //二维数组对角线转换为坐标的关系
    #include<stdio.h>
  2. #include<string.h>
  3. int map[],hang[],ans[];
  4. int n,cnt;
  5. void Dfs(int num)
  6. {
  7. int i,j,k;
  8. if(num>n)
  9. {
  10. cnt++;
  11. return ;
  12. }
  13. for(i=;i<=n;i++)
  14. {
  15. map[num]=i;//第num的皇后在第num列i行
  16. if(!hang[i])//枚举第i行是否可行
  17. {
  18. for(j=;j<num;j++)//枚举前num-1个皇后
  19. {//num就代表列,map[num]就代表num所在的行
  20. if(map[num]-num==map[j]-j||map[num]+num==map[j]+j)
  21. break;
  22. }
  23. if(j==num)
  24. {
  25. hang[i]=;
  26. Dfs(num+);
  27. hang[i]=;
  28. }
  29. }
  30. }
  31. }
  32. int main()
  33. {
  34. int m;
  35. for(n=; n<; n++)
  36. {
  37. memset(hang,,sizeof(hang));
  38. memset(map,,sizeof(map));
  39. cnt=;
  40. Dfs();
  41. ans[n]=cnt;
  42. }
  43. while(scanf("%d",&m)!=EOF&&m)
  44. {
  45. printf("%d\n",ans[m]);
  46. }
  47. return ;
  48. }

单纯二维坐标做法:

  1. #include <stdio.h>
  2. #include <string.h>
  3. int count[];//n的最大范围是10,打表!
  4. int k,cal;//k个大小的棋盘放的数目
  5. int map[][];//棋盘
  6. int dfs(int row,int column)
  7. {
  8. //最后一行也合适,放置数目加1
  9. if(row>k)
  10. {
  11. cal++;
  12. return ;
  13. }
  14. //判断同一列是否有棋子
  15. for(int i=; i<row; i++)
  16. if(map[i][column])
  17. return ;
  18. //判断左上45度是否有棋子
  19. for(int i=row-,j=column-; i>&&j>; i--,j--)
  20. if(map[i][j])
  21. return ;
  22. //判断右上45度是否有棋子
  23. for(int i=row-,j=column+; i>&&j<=k; i--,j++)
  24. if(map[i][j])
  25. return ;
  26. //都通过,该点合适并判断下一行
  27. map[row][column]=;
  28. for(int i=; i<=k; i++)
  29. {
  30. //当dfs(row+1,i,k)为1时,改行为最后一行,棋盘已放满
  31. if(dfs(row+,i))
  32. break;
  33. }
  34. map[row][column]=;
  35. //该点判断完成,恢复后再去判断其他点
  36. return ;
  37. }
  38. int main()
  39. {
  40. int n;
  41. for(k=; k<=; k++)
  42. {
  43. memset(map,,sizeof(map));
  44. cal=;
  45. //count[k]=0;
  46. for(int i=; i<=k; i++)
  47. dfs(,i);
  48. count[k]=cal;
  49. }
  50. while(scanf("%d",&n)!=EOF&&n)
  51. printf("%d\n",count[n]);
  52. return ;
  53. }

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. matlab滤波器的设计

    求出濾波器的階數以及 3dB 截止頻率後,可用相應的 Matlab 函數計算出實現傳遞函數的分子分母係數來.巴特沃斯型濾波器是通帶內最大平坦.帶外單調下降型的,其計算命令是:[b,a] = butte ...

  2. 11g R2 rac linstener 监听配置

    两个节点host,ipvip ,scan的信息 #eth0-Public IP 162.12.0.1    cqltjcpt1 162.12.0.3    cqltjcpt2 #eth1 PRIVAT ...

  3. FPGA前世今生(一)

    关于FPGA,我想做硬件的或多或少都听过.从上世纪80年代算来,FPGA已走过了30多个年头.我们以FPGA两大生产厂商,两大巨头之一的INTEL(altera)公司的FPGA为例,为大家逐步介绍FP ...

  4. android滚条简单说明

    先看一下我自己写的布局,电脑屏幕太小,只截取到了一个radiobutton. 先画一个horizontalScrollView,因为我要做水平滚动,然后我需要水平布局,就添加了一个LinearLayo ...

  5. PHP命名空间带来的干扰

    有时候,不想受命名空间约束,就可以整一个全局类. protected function sendDayuSms($tel,$code,$template_type,$product = "[ ...

  6. 《PHP对象、模式与实践》之高级特性

    高级特性包括:1.静态方法和属性(通过类而不是对象来访问数据和功能)2.抽象类和接口(设计,实现分离)3.错误处理(异常)4.Final类和方法(限制继承)5.拦截器(自动委托)6.析构方法(对象销毁 ...

  7. Sqoop导出MySQL数据

    导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...

  8. Python Twisted系列教程16:Twisted 进程守护

    作者:dave@http://krondo.com/twisted-daemonologie/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted ...

  9. Deep Learning 学习笔记(4):Logistic Regression 逻辑回归

    逻辑回归主要用于解决分类问题,在现实中有更多的运用, 正常邮件or垃圾邮件 车or行人 涨价or不涨价 用我们EE的例子就是: 高电平or低电平 同时逻辑回归也是后面神经网络到深度学习的基础. (原来 ...

  10. Android控件使用自定义字体

    我们不可能只满足于系统自带的字体(太丑),其实控件自定义字体也很简单.. 1.首先找到该字体的ttf文件. 2.把字体文件放在scr/mian/assets/fonts下,如果没有该路径则自己创建. ...