蓝桥杯剪邮票

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <map>
#include <stdlib.h>
#include <cmath>
#include <memory.h>
using namespace std;
int ans=0,temp=0;
int vis[12];
int dir[4]= {-4,4,-1,1};
int countt=0;
void dfs(int n)
{
    countt++;
    vis[n]=0;
    //cout<<"n:"<<n<<endl;
    if(n-4>=0&&vis[n-4]) dfs(n-4);
    if(n+4<12&&vis[n+4]) dfs(n+4);
    if(n-1>=0&&n!=4&&n!=8&&vis[n-1]) dfs(n-1);
    if(n+1<12&&n!=3&&n!=7&&vis[n+1]) dfs(n+1);
}
int main()
{
    memset(vis,0,sizeof(vis));
    for(int a=0; a<12; a++)
    {
        for(int b=a+1; b<12; b++)
        {
            for(int c=b+1; c<12; c++)
            {
                for(int d=c+1; d<12; d++)
                {
                    for(int e=d+1; e<12; e++)
                    {
                        vis[a]=1;
                        vis[b]=1;
                        vis[c]=1;
                        vis[d]=1;
                        vis[e]=1;
                        countt=0;
                        dfs(e);
                        if(countt==5)
                        {
                            //cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl;
                            ans++;
                        }
                        vis[e]=0;
                    }
                    vis[d]=0;
                }
                vis[c]=0;
            }
            vis[b]=0;
        }
       vis[a]=0;
    }
    cout<<ans<<endl;
    return 0;
}
View Code

因为是填空题 就用了暴力枚举5个格子然后dfs判断这5个格子是否联通

原文地址:https://www.cnblogs.com/wangkaipeng/p/6678896.html