第七届省赛C语言A组7题-剪邮票
2018-03-28 15:40
218 查看
剪邮票
如【图1.jpg】, 有12张连在一起的12生肖的邮票。这里写图片描述
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
思路:1.先遍历12中选5个的组合 792种
2.再判断这五个方块是否连通,用DFS。
一共116种。
代码:
如【图1.jpg】, 有12张连在一起的12生肖的邮票。这里写图片描述
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
思路:1.先遍历12中选5个的组合 792种
2.再判断这五个方块是否连通,用DFS。
一共116种。
代码:
#include<stdio.h> #include<string.h> int count=0; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int idx[3][4]; void dfs(int x) { int i,x1,y1; x1=x/4; y1=x%4; for(i=0;i<4;i++) { int x2=x1+dir[i][0]; int y2=y1+dir[i][1]; if(x2>=0 && x2<3 && y2>=0 && y2<4) { if(idx[x2][y2]==1) { idx[x2][y2]=0; dfs(x2*4+y2); } } } } int connect(int arr[],int n) { int i,j; memset(idx,0,sizeof(idx)); for(i=1;i<n;i++) { idx[arr[i]/4][arr[i]%4]=1; } dfs(arr[0]); for(i=0;i<3;i++) { for(j=0;j<4;j++) { if(idx[i][j]==1) return 0; } } return 1; } void permutation(int arr[],int n,int cur) { int i,j; if(cur==n) { int ok=connect(arr,n); if(ok) { count++; } } else { for(i=0;i<12;i++) { int ok=1; for(j=0;j<cur;j++) { if(i<=arr[j]) { ok=0; break; } } if(ok) { arr[cur]=i; permutation(arr,n,cur+1); } } } } int main() { int arr[5]; permutation(arr,5,0); printf("count=%d ",count); return 0; }
相关文章推荐
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 剪邮票(dfs填空)
- 蓝桥杯-第七届省赛javaA组-剪邮票
- 第七届蓝桥杯省赛剪邮票
- 蓝桥杯-第七届省赛javaA组-剪邮票
- 蓝桥杯第七届省赛JAVA真题----剪邮票
- 第七届蓝桥杯省赛总结
- 2016山东省第七届acm省赛 G题Triple Nim
- 蓝桥杯第七届初赛试题 剪邮票
- 报数游戏 湖南省第七届省赛
- 湖南省第七届省赛 G - 最优对称路径(spfa+dp)
- 第六届蓝桥杯大赛省赛c语言c组(6-9)
- 第七届蓝桥杯大赛省赛-凑算式
- 2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 1
- 蓝桥杯-第七届省赛javaA组-取球博弈
- 第六届蓝桥杯个人省赛C语言A组第四题
- 第七届蓝桥杯Java语言B组真题(省赛)
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 剪邮票(结果填空)
- acm湖南第七届省赛 RMQ with Shifts (线段树) csu 1110
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛-凑算式