蓝桥杯b组c++.6
2016-04-05 14:45
323 查看
方格填数
如下的10个格子
+–+–+–+
| | | |
+–+–+–+–+
| | | | |
+–+–+–+–+
| | | |
+–+–+–+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字
这个图片好像不能显示,描述一下吧:就是一个3*4的方格把第一个和最后一个去掉后剩下的部分。
解:
这是一个0~9十个数字填到十个区域去,还是老方法dfs把不同的数字放到不同的方格里,再判断是否符合相邻的数是否对角还是,,。答案是:1580
代码如下:
如下的10个格子
+–+–+–+
| | | |
+–+–+–+–+
| | | | |
+–+–+–+–+
| | | |
+–+–+–+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字
这个图片好像不能显示,描述一下吧:就是一个3*4的方格把第一个和最后一个去掉后剩下的部分。
解:
这是一个0~9十个数字填到十个区域去,还是老方法dfs把不同的数字放到不同的方格里,再判断是否符合相邻的数是否对角还是,,。答案是:1580
代码如下:
#include<iostream> #include<cmath> using namespace std; int ans=0; bool visit[10]; int mpt[3][4]; int flag[3][4]; void init() { for(int i=0;i<3;i++) for(int j=0;j<4;j++) flag[i][j]=1; flag[0][0]=0; flag[2][3]=0; } void solve() { int a[8][2]={0,1,0,-1,1,0,-1,0,1,-1,1,1,-1,1,-1,-1}; int book=true; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { int x,y; if(flag[i][j]==0)continue; for(int k=0;k<8;k++) { x=i+a[k][0]; y=j+a[k][1]; if(x<0||x>2||y<0||y>3||flag[x][y]==0)continue; if(fabs(mpt[x][y]-mpt[i][j])==1){book=false;break;} } if(flag==0)break; } } if(book)ans++; } void dfs(int index) { int x=index/4; int y=index%4; if(x==3) { solve(); return ; } if(flag[x][y]) { for(int i=0;i<10;i++) { if(!visit[i]) { visit[i]=true; mpt[x][y]=i; dfs(index+1); visit[i]=false; } } } else dfs(index+1); } int main() { init(); dfs(0); cout<<ans<<endl; }
相关文章推荐
- knn的c++版本
- C++正则表达式匹配器
- C语言中数组与指针
- C/C++程序题(26-30)
- c++复习:C++的精髓—虚函数virtual用法白话详解
- 五位数倒序
- Youki的C++命名规则
- 关于C++中的友元函数的总结
- C++ 简洁打印 N阶螺旋矩阵
- C++内存分配方式
- C++接口定义及实现举例
- C++学习之旅get、getline的用法
- vc++ 6.0编译后生成的文件
- Google C++ 编程风格指南
- C++多态的本质
- 运维调试记录:C++ compile error: default argument given for parameter
- c++ 逗号操作符重载
- python 调用 C++ code
- C++调用python
- 修炼成C++高手必看的C++书单