方格分割(蓝桥杯—dfs)

标题:方格分割

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

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

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

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

这题的确有趣,就是按中心图形一样两端走,成中心对称图形,怎么才能弄出来呢,

用dfs    要是走了任何一步,就把中心对称的那一步给标记上,那样就可以且一定但是四个方向都会有重复的,

所以答案就是除以4.

#include<bits/stdc++.h>
using namespace std;
int vis[7][7],a[7][7],cnt;
int dir[4][2]={
    {1,0},
    {-1,0},
    {0,1},
    {0,-1}
};
void dfs(int x,int y){
     if(x==0||y==0||x==6||y==6){
        cnt++;
        return ;
     }
     for(int i=0;i<4;i++){
        int tx=x+dir[i][0];
        int ty=y+dir[i][1];
        if(0<=tx&&tx<=6&&0<=ty&&ty<=6&&vis[tx][ty]==0){
            vis[tx][ty]=1;
            vis[6-tx][6-ty]=1;
            dfs(tx,ty);
            vis[tx][ty]=0;
            vis[6-tx][6-ty]=0;
        }
     }
}
int main()
{
    memset(vis,0,sizeof(vis));
    cnt=0;
    vis[3][3]=1;
    dfs(3,3);
    printf("%d\n",cnt/4);
}

猜你喜欢

转载自blog.csdn.net/z_sea/article/details/80165804