博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯 2017_4 分割方格(巧妙的dfs)
阅读量:4217 次
发布时间:2019-05-26

本文共 813 字,大约阅读时间需要 2 分钟。

标题:方格分割6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。请提交该整数,不要填写任何多余的内容或说明文字。

思路:从对称中心开始,以格子的边与边的交点为路,把格子涂色问题,转化为划分格子边界的问题(想象剪纸,剪的是边界)

 

 

至于答案为什么要除4呢,因为对于从中心的每次搜索,都会有相反方向的一次等价的搜索,这是2次重复,此外题目说明旋转对称的也是算一种,例如上下剪出来的一定能左右也剪出来,这又是重复的,故结果要除上4。

 

 

 

 

 

 

 

 

 

#include
bool vis[10][10];int dir[4][2] = {
{1,0},{-1,0},{0,1},{0,-1}};int ans;void dfs(int x, int y) { if(x == 0 || y == 0 || x == 6 || y == 6){//剪到边界就结束了一次分割 ++ans; return ; } for(int i = 0 ; i < 4; ++i){ int nx = x + dir[i][0]; int ny = y + dir[i][1]; if(vis[nx][ny]) continue; vis[nx][ny] = true; vis[6-nx][6-ny] = true; dfs(nx,ny); vis[nx][ny] = false;//回溯 vis[6-nx][6-ny] = false; } }int main() { vis[3][3] = true; dfs(3,3); printf("%d",ans/4);//除掉重复的 return 0; }

 

 

 

 

 

 

转载地址:http://zhimi.baihongyu.com/

你可能感兴趣的文章
cocos2dx 音频模块分析(4): 音效部分
查看>>
cocos2dx 音频模块分析(5): 音效部分
查看>>
19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
查看>>
cocos2.X版本lua端使用定时器的方法
查看>>
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>
dos: tree命令生成目录结构
查看>>
Managing Projects from the Command Line(android官网文档)
查看>>
Android项目自动生成build.xml,用Ant打包
查看>>
CCLayer注册lua回调函数setTouchPriority失效
查看>>
cocos2dx左下角三行数值意义
查看>>
LUA modue require package 区别
查看>>
package.loaded
查看>>
cocoStudio: Button设置锚点问题
查看>>
vld 使用
查看>>
MAC下安装多版本JDK和切换几种方式
查看>>
java.util.concurrent详解
查看>>
java事务大总结(一) 先理解数据库的事务以mysql为例
查看>>
java事务大总结(二) 理解JDBC事务的工作机制
查看>>