蓝桥杯 方格分割

标题:方格分割

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

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

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

请提交该整数,不要填写任何多余的内容或说明文字。

dfs 注意不是对格子进行DFS 是对分割线进行DFS 最后结果/4
除以4是因为 对于
000111
000111
000111
000111
000111
000111
从点3,3开始搜索 有两种方法
111111
111111
111111
000000
000000
000000
这也也有两种方法 它分割后的结果和上面是一样的 加起来是四种

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <sstream>
#include <algorithm>
int N, M, K;
//const int MAXN = , MAXM = 0;
//typedef long long ll;
const int si = 7;
int ans = 0;
using namespace std;
int vis[si][si];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

void dfs(int x, int y) {
    if (x == 0 || y == 0 || x == N || y == N) {
        ans++;
        return;
    }
    
    for (int i = 0; i < 4; i++) {
        int a = x + dx[i];
        int b = y + dy[i];
        if (vis[a][b]) continue;
        int ra = N - a;
        int rb = N - b;
        vis[a][b] = vis[ra][rb] = 1;
        dfs(a, b);
        vis[a][b] = vis[ra][rb] = 0;
    }
    
}
int main() {
    N = 6;
    vis[3][3] = 1;
    dfs(3, 3);

    cout << ans / 4 <<endl;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、 购物单小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌...
    _弓长_大人阅读 4,239评论 0 0
  • 方格填数 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方...
    掌灬纹阅读 3,841评论 0 2
  • 一、动态规划 找到两点间的最短路径,找最匹配一组点的线,等等,都可能会用动态规划来解决。 参考如何理解动态规划中,...
    小碧小琳阅读 25,534评论 2 20
  • 在冷飕飕的风里 打着寒颤的它惊醒了 还有它的梦 美丽的梦 它绝望得飘落 缓缓的 慢慢的 谁说落叶归根是美的景 难道...
    妹妹的鲜花饼阅读 1,738评论 0 1
  • 今天本来想放马蹄莲的水彩教程,但是由于这几天一直没有沉下心来好好的去画,导致现在还没有完成。这几天在画的时候就在想...
    宁语随记阅读 4,636评论 0 12

友情链接更多精彩内容