蓝桥杯-剪邮票

剪邮票

如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int mapp[12]={1,2,3,4,6,7,8,9,11,12,13,14};
int dir[4]={-1,1,5,-5};
int p[10],sum,flag,vis[10];
void dfs(int x)
{
    for(int i=0;i<4;i++)
    {
        int dx=p[x]+dir[i];
        if(dx<1||dx>14||dx==5||dx==10)
            continue;
        for(int j=0;j<5;j++)
        {
            if(!vis[j]&&dx==p[j])
            {
                vis[j]=1;
                dfs(j);
            }
        }
    }
}
int main()
{
    for(int a1=0;a1<12;a1++)
    {
        for(int a2=a1+1;a2<12;a2++)
        {
            for(int a3=a2+1;a3<12;a3++)
            {
                for(int a4=a3+1;a4<12;a4++)
                {
                    for(int a5=a4+1;a5<12;a5++)
                    {
                        p[0]=mapp[a1];
                        p[1]=mapp[a2];
                        p[2]=mapp[a3];
                        p[3]=mapp[a4];
                        p[4]=mapp[a5];
                        memset(vis,0,sizeof(vis));
                        vis[0]=1;
                        dfs(0);
                        flag=1;
                        for(int i=0;i<5;i++)
                        {
                            if(!vis[i])
                            {
                                flag=0;
                                break;
                            }
                        }
                        if(flag==1)
                            sum++;

                    }
                }
            }
        }
    }
    cout << sum << endl;

    return 0;
}

答案116

猜你喜欢

转载自blog.csdn.net/w1304636468/article/details/83573237
今日推荐