思路:二进制枚举所有马的状态,然后遍历所有马,标记其管辖点,最后判断当前方案是否合法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=10, INF=0x3f3f3f3f;
bool in(int a, int b);//判断越界
bool judge();//判断方案是否合法
void get(int k, int &start, int &end);//得到对应不蹩腿方向所能跳到的位置坐标 int res, cnt_min=INF;//方案数, 数量
bool st[N][N], horse[N][N];//马和管辖数组和马位置数组
int dx[8]={-2, -2, -1, 1, 2, 2, 1, -1};//以左上为起点顺时针
int dy[8]={-1, 1, 2, 2, 1, -1, -2, -2};//马能跳到的 位置
int bx[4]={-1, 0, 1, 0}, by[4]={0, 1, 0, -1};//蹩腿位置 signed main()
{for(int op=0;op<(1<<25);op++){memset(st, false, sizeof st);memset(horse, false, sizeof horse);int cnt=0;for(int i=0;i<25;i++)if(op>>i&1)//枚举当前方案, 马的位置 {st[i/5][i%5]=true;//i/5, i%5对应转化 horse[i/5][i%5]=true;cnt++;}if(cnt>cnt_min) continue;//如果数量已经大于存储的数量,可以跳过 for(int i=0;i<5;i++)for(int j=0;j<5;j++)if(horse[i][j])//枚举马的位置,有马再标记其所管辖的格子 for(int k=0;k<4;k++)//枚举蹩腿位置 {int a=i+bx[k], b=j+by[k];if(!in(a, b)||horse[a][b]) continue;//越界或该方向蹩腿, 则跳过 int start, end;get(k, start, end);//枚举马在当前方向所能跳到的位置坐标 for(int o=start;o<=end;o++){int sa=i+dx[o], sb=j+dy[o];if(in(sa, sb)) st[sa][sb]=true;//如果在范围内,则标记 }}if(judge()){if(cnt<cnt_min) cnt_min=cnt, res=0;//判断成功,并且小于已经存储的值,则更新 res++;}}cout<<cnt_min<<' '<<res<<endl;//9, 90
}void get(int k, int &start, int &end)
{if(k==0) start=0, end=1;if(k==1) start=2, end=3;if(k==2) start=4, end=5;if(k==3) start=6, end=7;
}bool judge()
{for(int i=0;i<5;i++)for(int j=0;j<5;j++)if(!st[i][j]) return false;return true;
}bool in(int a, int b)
{if(a<0||a>4||b<0||b>4) return false;return true;
}

结果填空:马的管辖(超详解版)相关推荐

  1. 《JavaScript》重学JS-细聊一下prototype、__proto__与constructor(超详解版)

    求关注,求收藏,求点赞,非常感谢!你的每一个阅读都是我的力量源泉! 前言 最近在比对class以及将class编译成es5后的代码,看的是晕头转向,尤其在原型链这一块,发现之前的了解实在有些不够,因此 ...

  2. 小程序开发入门超详解之WXML

    小程序开发入门超详解之WXML 小程序入门开发超详解版之WXML 开发框架组成介绍 WXML语法 WXML特性 小程序入门开发超详解版之WXML 欢迎大家添加月神的微信:18333806737进行专业 ...

  3. Mybatis案例超详解

    Mybatis案例超详解 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟点理解 ...

  4. Android vector标签 PathData 画图超详解

    此文章来源于https://www.cnblogs.com/yuhanghzsd/p/5466846.html点击打开链接 Android vector标签 PathData 画图超详解 SVG是一种 ...

  5. python控制手机模拟器_Appium+python自动化之连接模拟器并启动淘宝APP(超详解)...

    简介 上一篇讲解完模拟器的安装.配置好以后,就好比我们手机已经买好,并且系统已经做好了,就差我们用数据线和电脑连接开始实战了,这篇宏哥就带着小伙伴们和童鞋们趁热打铁,讲解和分享一下如何连接模拟器(电脑 ...

  6. js打印三角形超详解

    js打印三角形超详解 j控制星星的总行数,i控制每行星星的打印个数 打印图形如下: (1) (2) //str=""用来存储星星// 理解步骤1:在一行输出6个星星如何操作,在循环 ...

  7. 线性规划之单纯形法【超详解+图解】-转载

    线性规划之单纯形法[超详解+图解] 目录 1.作用 2.线性规划的一般形式 5.1几何意义 5.2如何判断最优 5.3如何选择新的基变量 5.4如何选择被替换的基变量 5.5终止条件 标准型: 转化为 ...

  8. 【平衡小车制作】(七)串级PID调参及平衡成果展示(超详解)

      大家好,我是小政.本篇文章我将针对PID调参进行详细的讲解,让每位小伙伴能够对比例.积分.微分三个参数如何调节有更加清晰的理解. 一.调参步骤 确立机械中值 直立环(内环)--Kp极性.Kp大小. ...

  9. 马氏距离例题详解(全网最详细)

    马氏距离例题详解 定义 马哈拉诺比斯距离是由印度统计学家马哈拉诺比斯 (英语)提出的,表示数据的协方差距离.它是一种有效的计算两个未知样本集的相似度的方法.与欧氏距离不同的是它考虑到各种特性之间的联系 ...

最新文章

  1. 浏览器是怎样工作的:渲染引擎,HTML解析
  2. 来认识世界上第一支AI基金:模仿股票分析师 365天无间断工作
  3. Hadoop安装及eclipse配置
  4. [云炬创业管理笔记]第十章商业计划书答辩测试2
  5. C++trie树的多重搜索算法的实现(附完整源码)
  6. 区分元素特性attribute和对象属性property
  7. 一键清理电脑垃圾小程序
  8. 整理计算机的硬盘,史上最全的电脑清理磁盘方法 让你电脑速度像过山车一样快...
  9. 图像特征原理--HOG特征
  10. vb里的lbound和ubound的用法
  11. PHP对接美团配送接口遇到的问题
  12. 电子科技大学格拉斯哥学院基础实践——共享单车的调查
  13. 今日锋评:愚人节的秘密
  14. JS实现 移动零 (将数组中零元素移到数组后面)
  15. WebDAV之葫芦儿·派盘+墨阅
  16. 微信小程序wepy自定义card控件封装
  17. BZOJ 2448: 挖油
  18. 安卓手机如何投屏到电视上_安卓和苹果手机投屏到智能电视方法
  19. 2021苹果cms模板集合新增苹果cms首涂模板
  20. Eclipse编程常用快捷键大全

热门文章

  1. 朝韩危机-Python模拟导弹互射
  2. vue项目中 localStorage 的用法建议
  3. 自助建站与智能建站有什么特点
  4. 系统封装Win7专业版(安装软件、系统优化、封装注意)
  5. 信号发生器低占空比调节
  6. 未来计算机专业会被淘汰吗,李开复:未来50%的职业将被淘汰,女儿的一个问题让我深思...
  7. 昆明现代科技学校计算机,昆明现代科技学校2021年宿舍条件
  8. 《论文阅读》Are Emojis Predictable?
  9. 21、【易混淆概念集】-第十三章 相关方参与度评估矩阵 VS 相关方参与计划 相关方登记册 VS 相关方参与计划 相关方立方体 VS 凸显模型 权力/利益方格
  10. QT使用msvc编译器