首页 > 代码库 > 16年第七届蓝桥杯第七题_剪邮票
16年第七届蓝桥杯第七题_剪邮票
剪邮票
如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
//枚举所有可能的组合,然后判断是否连通
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int kind[5]; int dir[4][2]={-1,0,0,1,1,0,0,-1}; bool vis[13]; bool legal(int x,int y) { return (x>=0&&x<3&&y>=0&&y<4); } int tmpres; void dfs(int x,int y) { for(int i=0;i<4;i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(legal(xx,yy)) { int has=0; for(int j=0;j<=4;j++) if(kind[j]-1==xx*4+yy) has=1; if(has&&vis[xx*4+yy]==0) { tmpres++; vis[xx*4+yy]=1; dfs(xx,yy); } } } } int main() { int res=0; for(int i=1;i<=12;i++) { kind[0]=i; for(int j=i+1;j<=12;j++) { kind[1]=j; for(int k=j+1;k<=12;k++) { kind[2]=k; for(int e=k+1;e<=12;e++) { kind[3]=e; for(int f=e+1;f<=12;f++) { kind[4]=f; tmpres=1; memset(vis,0,sizeof(vis)); vis[kind[0]-1]=1; dfs((kind[0]-1)/4,(kind[0]-1)%4); if(tmpres==5) res++; } } } } } cout<<res<<endl; return 0; }
16年第七届蓝桥杯第七题_剪邮票
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。