蓝桥杯 方格填数
来源:互联网 发布:win10菜单网络键打不开 编辑:程序博客网 时间:2024/04/30 09:06
方格填数
#include <stdio.h>#include <math.h>int flag[3][4];//表示哪些可以填数int mpt[3][4]; //填数bool visit[10];int ans = 0;void init()//初始化{int i,j;for(i = 0 ; i < 3 ; i ++)for(j = 0 ; j < 4 ; j ++)flag[i][j] = 1;flag[0][0] = 0;flag[2][3] = 0;}void Solve(){int dir[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 ++){//判断每个数周围是否满足if(flag[i][j] == 0)continue;//如果是0值,不是需要判断的位置 for( int k = 0 ; k < 8 ; k ++){int x,y;x = i + dir[k][0];//八个方向 y = j + dir[k][1];if(x < 0 || x >= 3 || y < 0 || y >= 4 || flag[x][y] == 0) continue;//超出界限 if(fabs(mpt[x][y] - mpt[i][j]) == 1) book = false;//相邻 }}}//如果不存在相邻的情况 if(book) ans ++;//相当于放置之后再判断 }void dfs(int index){int x,y;x = index / 4;y = index % 4;if( x == 3)//index已经超过 现有的个数 即所有的格子都已经放置完毕 {Solve(); return;} if(flag[x][y]) {for(int i = 0 ; i < 10 ; i ++) {if(!visit[i])//看1-10的数字有没有被取走了 {visit[i] = true; mpt[x][y] = i; dfs(index+1); visit[i] = false; } } } else//不断放置 { dfs(index+1); }}int main(){init();dfs(0);printf("%d\n",ans);return 0;}
0 0
- 蓝桥杯 方格填数
- 蓝桥杯 方格填数
- 蓝桥杯方格填数
- 蓝桥杯方格填数
- 蓝桥杯-方格填数
- 蓝桥杯--方格填数
- 蓝桥杯方格填数
- 方格填数 蓝桥杯
- 蓝桥杯 方格填数
- 方格填数 蓝桥杯
- 蓝桥杯 方格填数
- 蓝桥杯 方格填数
- 蓝桥杯方格填数DFS
- 蓝桥杯之方格填数
- 方格填数(蓝桥杯)
- 蓝桥杯2016:方格填数
- 蓝桥杯之方格填数
- 蓝桥杯 第七届省赛试题 方格填数
- String的总结和应用
- 《搬进 Github》欣赏之四-合并分支
- js基础2
- md5 算法描述
- 《PCL点云库学习&VS2010(X64)》Part 2 A simple test of PCL in MFC
- 蓝桥杯 方格填数
- Greendao简单使用
- openlayers读取arcgis server发布服务
- 学生信息管理系统
- 浅析VO、DTO、DO、PO的概念、区别和用处
- 反对称规则
- 《搬进 Github》欣赏之五-团队合作流程
- 教你用U盘安装Ubuntu
- 数据结构1顺序栈