热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

25行代码AC_2017年C/C++A组第四题方格分割(dfs剪痕)

励志用少的代码做高效表达问题描述:6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。 如图:p1.png,p2.png

励志用少的代码做高效表达




问题描述:

6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。

如图:p1.png, p2.png, p3.png 就是可行的分割法。

试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。





题意分析

几种分析思路:

暴力列举: 直接枚举18个点,然后判断。 但时间耗费太高。 放弃。

对格子dfs:dfs无法识别T型图案(因为深搜只能遍历一条路),因此放弃

想了又想, 如果对边线进行dfs,从中间点出发,最后只要用深搜能到达边界, 就代表着这条线把整个图案分成了两半。 思路就出来了!

剪刀剪痕与dfs边界如下图所示:




代码展示:

#include
using namespace std;
int vis[10][10];
int dire[4][2] = {-1,0, 1,0, 0,-1, 0,1};
int ans;void dfs(int x, int y) {if(x==0 || y==6 || x==6 || y==0) {ans++; return;}
// 当前的点标注为已访问vis[x][y] &#61; 1;vis[6-x][6-y] &#61; 1; for(int i &#61; 0; i < 4; i&#43;&#43;) {int tx &#61; x&#43;dire[i][0];int ty &#61; y&#43;dire[i][1];
// 新坐标if(tx<0 || tx>6 || ty<0 || ty>6) continue;if(!vis[tx][ty]) dfs(tx, ty); }vis[x][y] &#61; 0;vis[6-x][6-y] &#61; 0;
}int main() {vis[3][3] &#61; 1;dfs(3, 3);cout << ans/4 << endl;
return 0; }



感想与总结

1、蓝桥杯的绝大多数题都是搜索或暴力&#xff0c;而近两年纯暴力的题越来越少&#xff0c;取而代之的是模拟&#43;搜索或暴力&#43;搜索

2、本题就是一道非常标准的 模拟&#43;搜索 类型题。 关于暴力&#43;搜索&#xff0c;可参考2016年B组7题的剪邮票&#xff0c; 也很经典&#xff0c; 题目&#43;题解&#xff0c;传送门

3、对于对称类型的题&#xff0c; 一定要考虑是否有重复的情况出现。



勿在浮沙筑高台&#xff0c;不为浮华易匠心。 加油&#xff0c;陌生人&#xff01;


推荐阅读
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文针对HDU 1042 N! 问题提供详细的解析和代码实现。题目要求计算给定整数N(0 ≤ N ≤ 10000)的阶乘N!。文章不仅提供了算法思路,还附上了C++语言的具体实现。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
author-avatar
苏绿儿520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有