蓝桥之剪邮票--BFS



剪邮票


如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)

比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。



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


请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int dx[]= {-1,0,1,0};
int dy[]= {0,1,0,-1};
int vis[3][4];
struct node
{
    int x;
    int y;
} f,g;
int sum;
int bfs(int index,int step)
{
    int ans=0;
    queue<node> q;
    f.x=index/4;
    f.y=index%4;
    q.push(f);
    vis[f.x][f.y]=0;
    while(!q.empty())
    {
        f=q.front();
        q.pop();
        if(step==5)
            return 1;
        for(int i=0; i<4; i++)
        {
            g.x=f.x+dx[i];
            g.y=f.y+dy[i];
            if(vis[g.x][g.y]&&g.x>=0&&g.x<3&&g.y>=0&&g.y<4)
            {
                vis[g.x][g.y]=0;
                step=step+1;
                q.push(g);
            }
        }
    }
    return 0;
}

int main()
{
    sum=0;
    for(int i=0; i<12-4; i++)
    {
        for(int j=i+1; j<12-3; j++)
        {
            for(int l=j+1; l<12-2; l++)
            {
                for(int h=l+1; h<12-1; h++)
                {
                    for(int g=h+1; g<12; g++)
                    {
                        memset(vis,0,sizeof(vis));
                        vis[i/4][i%4]=1;
                        vis[j/4][j%4]=1;
                        vis[l/4][l%4]=1;
                        vis[h/4][h%4]=1;
                        vis[g/4][g%4]=1;
//                        for(int a=0;a<3;a++){
//                                for(int b=0;b<4;b++){
//                                    printf("%d",vis[a][b]);
//                                }
//                                printf("\n");
//                            }
//                        printf("\n");
                        if(bfs(i,1))
                        {
                            sum++;
                        }
                    }
                }
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}


猜你喜欢

转载自blog.csdn.net/kangyan__/article/details/79740750