问题描述 :

  八皇后问题是在棋盘上放皇后,互相不攻击,求方案。变换一下棋子,还可以有八车问题,八马问题,八兵问题,八王问题,注意别念反。在这道题里,棋子换成车,同时棋盘也得换,确切说,是进行一些改造。比如现在有一张n*n的棋盘,我们在一些格子上抠几个洞,这些洞自然不能放棋子了,会漏下去的。另外,一个车本来能攻击和它的同行同列。现在,你想想,在攻击的过程中如果踩到一个洞,便会自取灭亡。故,车的攻击范围止于洞。

  此题,给你棋盘的规模n,以及挖洞情况,求放k个车的方案数(k从0到最多可放车数)

输入说明 :

第一行一个整数n表示棋盘大小

接下来n行,每行n个用空格隔开的数字0或1,0的形状表示洞,1表示没有洞

数据规模和约定

  n<=8

输出说明 :

若干行,第i行表示放i个车的方案数

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int a[9][9];
int n;
int cishu=0;
int judge(int x, int y);
void dfs(int x, int c, int cengshu,int weizhi);int main()
{cin >> n;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> a[i][j];}}for (int i = 1;; i++){cishu = 0;dfs(1, i, 0,1);if (cishu == 0){break;}cout << cishu << endl;}return 0;}
int judge(int x, int y)//由于是向下 和向右查找能否放置 所以考虑满不满足情况的Judge函数只要
//向左向上查找 即可
{int i, j;for (i = x - 1; i >= 1; i--)//行{if (a[i][y] == 0 )break;if( a[i][y] == 2)return 0;}for (i = y - 1; i >= 1; i--)//列{if (a[x][i] == 0 )break;if(a[x][i] == 2)return 0;}return 1;
}void dfs(int x, int c, int cengshu,int weizhi)
{if (cengshu == c ){cishu++;return;//返回条件 已经放置了限定的n个车}if (x > n){return;//返回条件 已经考虑到最后一行了}for (int i = weizhi; i <= n; i++){if (a[x][i] != 0){if (judge(x, i)!=0){a[x][i] = 2;dfs(x, c, cengshu + 1,i+1);a[x][i] = 1;}}}dfs(x + 1, c, cengshu,1);/*关键点:因为有可能同一列放nn个也满足 或者第一列都不放 第二列都不放...x+1代表的是层数 在第一次dfs中是向右放置 但每一次向右放置dfs都包括了向下放置的第二个dfs 当最外层循环结束 也进行最外层的dfs 即第一层都不放棋子只放第二层 这样便考虑了所有情况 !*/
}

棋盘多项式·八皇后改八车<递归>相关推荐

  1. 十二、八皇后问题(递归回溯)

    一.八皇后问题介绍 (本次使用回溯算法解决,之后会用贪心算法优化) 在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行. 同一列或同一斜线上,问有多少种摆法(9 ...

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

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

  3. 八皇后问题(递归+非递归)

    一.问题描述 在8×8格的国际象棋棋盘上放置八个皇后,使得任意两个皇后不能互相攻击,即任何行.列或对角线(与水平轴夹角为45°或135°的斜线)上不得有两个或两个以上的皇后.这样的一个格局称为问题的一 ...

  4. 图解八皇后问题(递归)

    (以高斯为代表的许多数学家先后研究过这个问题.后来,当计算机问世,通过计算机程序的运算可以轻松解出这个问题) 题目描述 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手 ...

  5. 算法学习笔记之三:八皇后问题(递归、回溯)

    (一)题记 从去年下半年开始找工作,大大小小也被"鄙"试."面"试了n多回了.说实话只怪自己并未对常见的笔试题.面试题进行准备,导致败下阵来.一门学问要想学透学 ...

  6. 八皇后非递归算法c语言,要求;编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一? 爱问知识人...

    将下面程序改成运行后需要输入起始位置(第N行第M列)然后输出结果. #include #include enum Status {TRUE,FALSE}; //枚举状态 int matrix[ 将下面 ...

  7. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  8. 八皇后问题4种c语言算法

    八皇后问题 1.递归回溯法 B站懒猫老师讲的(我在这里学的) 八皇后问题的递归回溯算法思路:从第一行开始当某一行皇后位置不与前面所有皇后位置冲突那么记录该行皇后位置并调用递归函数进入下一行,摆放下一个 ...

  9. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

最新文章

  1. 基于postfix一步一步构建Mailserver,支持虚拟用户,支持WebMail
  2. 《xUnit Test Patterns》学习笔记6 - Test Double
  3. 使用VS2012内建的C++测试架构进行单元测试
  4. Android无法生成R文件的终极解决办法
  5. 叠置分析(涉及结果属性和输入图层属性的关系)
  6. unity怪物攻击玩家减血_怪物猎人发布15周年 — 回顾历代封面怪之三大传奇怪物...
  7. linux虚拟机系统的复制或克隆后续问题解决!
  8. Cover开启投票是否对Yearn漏洞提供保险
  9. 解决Ubuntu系统找不到进程,但是GPU显存占满问题
  10. 《How to Reshape Input Data for Long Short-Term Memory Networks in Keras》学习笔记
  11. Python:学习笔记之函数的参数和返回值
  12. 一文详解NGram语言模型以及困惑度perplexity
  13. 问题分析——Maven打包后发版,静态资源找不到
  14. python寻峰,LeetCode-python 162.寻找峰值
  15. 免费的数据恢复软件哪个好?教您找回丢失数据!
  16. Java日期——获取今天是星期几
  17. 5.22非常虚伪的集训总结
  18. 做好自动化运维平台必备技能
  19. 重庆计算机考试怎么才算过,@重庆考生 中高考电脑阅卷流程是这样的 注意细节可多拿分...
  20. 2060显卡驱动最新版本_2款16系GTX新Max-Q点评新系列笔记本显卡天梯图

热门文章

  1. 腾讯云轻量应用服务器+宝塔+Tomcat部署前端项目
  2. 面试官:你知道Dubbo怎么做优雅上下线的吗?你:优雅上下线是啥?
  3. 财务年终总结怎么写?技巧在这里
  4. 2020-09-28
  5. ie浏览器打不开闪退_ie浏览器点开闪退_ie浏览器打不开?就是闪退.别的可以_ie浏览器打不开闪退...
  6. [转]信息安全相关理论题(二)
  7. 系统集成项目管理工程师案例分析考点汇总(成本、质量、人力)
  8. (已解决)video标签在ios端默认全屏播放(h5开发)
  9. 微信编辑器哪个操作最简单?
  10. 微信支付-通知验签始终不通过的问题