蓝桥杯第七届 方格填数(dfs)
2017-03-03 14:59
274 查看
方格填数
如下的10个格子
+–+–+–+–+
| # | ? | ? | ? |
+–+–+–+–+
| ? | ? | ? | ? |
+–+–+–+–+
| ? | ? | ? | # |
+–+–+–+–+
#:不能填数字;?:需要填写数字的空格
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
如下的10个格子
+–+–+–+–+
| # | ? | ? | ? |
+–+–+–+–+
| ? | ? | ? | ? |
+–+–+–+–+
| ? | ? | ? | # |
+–+–+–+–+
#:不能填数字;?:需要填写数字的空格
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include<stdio.h> int visit[10]; int flag[3][4]; int map[3][4]; int ans=0; void judge() { int dir[8][2]= {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}; int i,j,k,x,y; int valid=1; for(i=0;i<3;i++) for(j=0;j<4;j++) { if(flag[i][j]==0) continue; for(k=0;k<8;k++) { x=i+dir[k][0]; y=j+dir[k][1]; if(x < 0||x > 2||y<0||y>3||flag[x][y]==0) continue; if(map[i][j]-map[x][y]==1) valid=0; } } if(valid!=0) ans++; return; } void dfs(int n) { int i,x,y; x=n/4;//获得所在行 y=n%4;//获得所在列 if(x==2&&y==3) judge(); if(flag[x][y]!=0) //如果当前位置可填入数字 for(i=0;i<10;i++) { if(visit[i]==0) { visit[i]=1; map[x][y]=i; dfs(n+1); visit[i]=0; } } else//当前位置不可填 dfs(n+1); return; } int main() { memset(map,0,sizeof(map)); memset(visit,0,sizeof(visit)); memset(flag,1,sizeof(flag)); flag[0][0]=0; flag[2][3]=0; dfs(0); printf("%d\n",ans); return 0; }
相关文章推荐
- 蓝桥杯_2016年第七届C/C++B组—6.方格填数 【DFS】
- 第七届蓝桥杯第6题:方格填数
- 2016第七届蓝桥杯C++B组第六题:方格填数
- 方格填数-第七届蓝桥杯c/c++B组
- 第七届蓝桥杯大赛个人赛省赛(软件类)A组第三题 方格填数
- 2015第六届蓝桥杯决赛--方格填数(DFS)
- 蓝桥杯-第七届省赛javaB组-方格填数
- 第七届蓝桥杯C\C++B组省赛题目——方格填数
- 蓝桥杯第七届方格填数法二
- 蓝桥杯-第七届Java语言B组-方格填数
- 蓝桥杯(第七届JavaB组第六题:方格填数)
- DFS深度优先搜索(深搜) 例题:方格填数(蓝桥杯)
- 2016第七届蓝桥杯-方格填数
- 备考蓝桥杯(19)方格填数(DFS) java实现
- 蓝桥杯 方格填数(DFS)
- 第七届蓝桥杯 省赛B组方格填数
- 2016第七届蓝桥杯 06 方格填数(java)
- 2016-蓝桥杯省赛-C语言大学B组_方格填数_【DFS&全排列】
- 第七届蓝桥杯省赛6:方格填数
- 2017年蓝桥杯A组 方格分割(dfs)