N皇后问题

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

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
/**
n皇后问题,由于N 是小于等于10的正整数,
所以可以使用打表的方法把前十中情况全
部找出来存起来然后每次输入时不用重新
的计算了。
*/
#include <stdio.h>#define NUMS 10
/*输入的数字1---10*/
int N;
/*棋盘*/
int chessboard[11][11];
/* 用来记录拜访数目 */
int cal;/*
检查皇后放置此行此列是否可以,可以返回1,不可以返回0
此递归是一行一行找的,K是棋盘的长度
*/
int dfs_check(int row,int column,int k)
{/* 说明已经到了棋盘的界外,前边都符合了 */if(row>k){cal++;return 1;}/* 正上方是否有皇后*/for(int i = 1; i < row; i++)/* 如果有皇后则返回不能放置这里返回0*/if(chessboard[i][column] == 1)return 0;/* 左右上方45度角检查是否可以*//* 左上方*/for(int i=row-1,j=column-1;i>0&&j>0;i--,j--)if(chessboard[i][j] == 1)return 0;/* 右上方*/for(int i=row-1,j=column+1;i>0&&j<=k;i--,j++)if(chessboard[i][j] == 1)return 0;/*标记这个位置成功了*/chessboard[row][column] = 1;/*进行下一行搜索*/for(int i=1;i<=k;i++)if(dfs_check(row+1,i,k)==1)break;chessboard[row][column] = 0;return 0;
}int main()
{int i,j,k;int count[11];/*打表*/for(k=1;k<=NUMS;k++){count[k] = 0;cal = 0;/*首先将棋盘初始化全部置为0*/for(i=0;i<=NUMS;i++)for(j=0;j<=NUMS;j++)chessboard[i][j]=0;for(i=1;i<=k;i++)dfs_check(1,i,k);count[k] = cal;}while(scanf("%d",&N)!=EOF&&N!=0)printf("%d\n",count[N]);return 0;
}

hdu 2553 N皇后问题(深度递归搜索)相关推荐

  1. hdu 2553 N皇后问题 搜索 回溯法

    题目地址: hdu 2553 直接小白书上面的回溯法  但是不知道有多少组数据 所以打一个表~ 代码: #include<iostream>using namespace std;int ...

  2. [HDU] 2553 N皇后问题-简单深搜

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2553 方法: 1.可以用对称的思想,即:如果N是偶数,则只计算第一个皇后分别放在第一行的位置1到N/ ...

  3. 八皇后问题 (递归 搜索)

    八皇后问题:要在国际象棋棋盘8*8中放八个皇后,使任意两个皇后都不能互相吃.(提示:皇后能吃同一行.同一列.同一对角线的任意棋子.) /*分析:每一列,每一行,每一个对角线只能放一个皇后,判断对角线是 ...

  4. hdu 2553 N皇后问题

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

  5. hdu 2553 N皇后问题【dfs】

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

  6. DLS 深度受限搜索 狼羊 过河 问题 python 实现

    深度受限搜索(DLS)简单地说就是深度有限搜索(DFS)+深度限制(limit) DLS伪代码 实例:狼羊 过河 问题 3只羊和3头狼在河岸A,想要过河抵达河岸B.它们只有一艘船并且船上必须有1-2只 ...

  7. 最基础的深度优化搜索(dfs)题目

    最基础的深度优化搜索(dfs)题目 前几天回看自己大一刚开学刷oj时遇到的一道循环类题目,结合这个假期自已学的一点点算法知识,重新写了段代码,也算是加深自己对dfs的理解了. 题目描述 将1,2,⋯, ...

  8. DFS 深度优化搜索

    DFS 深度优化搜索 DFS 算法 思想:一直往深处走,直到找到解或者走不下去为止 类似于树的先根遍历.就是不撞南墙不回头 模板一: DFS(dep,..)//dep代表目前DFS的深度 {if(找到 ...

  9. 【用深度学习搜索相似服饰】《Using Deep Learning to Find Similar Dresses》by Luis Mey

    [用深度学习搜索相似服饰]<Using Deep Learning to Find Similar Dresses>by Luis Mey

最新文章

  1. 用 python 实现一个多线程网页下载器
  2. Nexys3学习手记1:写在前面的话
  3. centos 配置php开发环境变量配置,CentOS中配置PHP和Nginx环境变量
  4. php读取csv指定行_PHP快速读取CSV大文件指定行
  5. 工作163:eachrt修改
  6. 图解集成学习中的梯度提升思想
  7. JVM系列(三)— Java内存模型
  8. windows安装gnu_在Windows上安装GNU Emacs
  9. 将Vba代码转换成Php代码,将这个Excel公式转换成VBA代码(函数)
  10. C++语言类的详解和示例
  11. SQLserver数据库还原后显示正在还原
  12. 团队项目——测试心得
  13. stm32f4c语言编程,如何使用STM32F4的DSP库
  14. 2021年值得推荐的几个可视化软件
  15. 红米note5系统Android11,红米Note5 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  16. LeetCode常见题型——背包问题
  17. 读书笔记_002 甘于平凡而不甘于平凡的腐烂——《平凡的世界》所感
  18. OpenStack挂载ISO,安装原版windows
  19. JQuery动画之流星雨
  20. 爬虫基础_urllib

热门文章

  1. C++读写EXCEL文件方式比较 .
  2. 使用 window.alert()
  3. Sql语句在线转java bean https://www.bejson.com/othertools/sql2pojo/
  4. template与图片懒加载
  5. iOS开发中怎么样使用激光推送
  6. Datatable中对某列求和,三种不同情况下的方法 .
  7. hdu 4417(线段树OR树状数组)
  8. 利用OpenCV的VideoWriter类实现视频的写操作
  9. 半阈值化的应用说明及利用函数threshold实现半阈值化的方法
  10. 噪声dba是什么单位_在职DBA : 工作多年为什么还是选择报读工商管理博士