2016第七届蓝桥杯-方格填数
2016-04-06 18:49
295 查看
方格填数
如下的10个格子
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
我的思路是先填玩表,然后再判断是否符合要求;
如下的10个格子
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
我的思路是先填玩表,然后再判断是否符合要求;
#include<stdio.h> #include<string.h> #include<math.h> int t; int flag[10]; //记录数字是否选 int map[4][5]; int sum=0; int judge() {//判读是否符合要求 int i,j; for(i=0;i<3;i++) { for(j=0;j<4;j++) if(fabs(map[i][j]-map[i][j+1])==1||fabs(map[i][j]-map[i+1][j])==1||fabs(map[i][j]-map[i+1][j-1])==1||fabs(map[i][j]-map[i+1][j+1])==1) return 0; } return 1; } void dfs(int t) {//DFS现将表填满, int i; if(t==11) { if(judge()) sum++; return; } for(i=0;i<=9;i++) { if(!flag[i]) { flag[i]=1; map[t/4][t%4]=i; dfs(t+1); flag[i]=0; } } } int main() { int i; for(i=0;i<4;i++) { map[i][4]=1000; } memset(flag,0,sizeof(flag)); for(i=0;i<5;i++) map[3][i]=1000; map[0][0]=map[2][3]=1000; dfs(1); printf("%d\n",sum); return 0; }
相关文章推荐
- 返回一个二维整数数组中最大联通子数组的和
- 读取文件
- 使用maven创建项目和cannot change version web module 3.0
- 将一个像素绘制到屏幕上
- BZOJ2659: [Beijing wc2012]算不出的算式
- 关于css外部引用注意事项
- 最大连通数组
- ActionContextCleanUp作用
- 052(二十四)
- Python自然语言处理:词干、词形与MaxMatch算法
- 简单git操作
- DATE
- 对于redis底层框架的理解(一)
- 禅道项目管理软件
- jquery-通过下拉菜单更改input日期
- 欢迎使用CSDN-markdown编辑器
- 使用struts2实现上传下载功能(附代码)。类似于ftp服务器。不止局限于本机的上传下载,其他机器也可使用此功能,服务器似的功能
- 随笔之ros多线程
- android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中
- 基于echo例子的netty4通信总结