蓝桥杯 方格分割

作者: smatrcHendsa | 来源:发表于2019-03-21 10:25 被阅读0次

    标题:方格分割

    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;
    }
    

    相关文章

      网友评论

        本文标题:蓝桥杯 方格分割

        本文链接:https://www.haomeiwen.com/subject/fkofvqtx.html