方格填数

来源:互联网 发布:淘宝店铺会员卡领取 编辑:程序博客网 时间:2024/04/30 14:11
方格填数

如下的10个格子

(如果显示有问题,也可以参看【图1.jpg】)

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


解题思路深搜,还是逐个填入数据进行判断,与六角填数一样的道理  (六角数:http://blog.csdn.net/liu940204/article/details/51005414)
具体代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int a[11],vis[11];int count;void DFS(int x){if(x>10)//所有方格填数完毕 {if(abs(a[1]-a[2])>1 && abs(a[1]-a[4])>1 && abs(a[1]-a[5])>1 && abs(a[1]-a[6])>1 &&   abs(a[2]-a[3])>1 && abs(a[2]-a[5])>1 && abs(a[2]-a[6])>1 && abs(a[2]-a[7])>1 &&   abs(a[3]-a[6])>1 && abs(a[3]-a[7])>1 &&   abs(a[4]-a[5])>1 && abs(a[4]-a[8])>1 && abs(a[4]-a[9])>1 &&   abs(a[5]-a[6])>1 && abs(a[5]-a[8])>1 && abs(a[5]-a[9])>1 && abs(a[5]-a[10])>1 &&   abs(a[6]-a[7])>1 && abs(a[6]-a[9])>1 && abs(a[6]-a[10])>1 &&   abs(a[7]-a[10])>1 &&   abs(a[8]-a[9])>1 &&   abs(a[9]-a[10])>1){//输出每种情况 //for(int i=1;i<=10;i++)//printf("%d ",a[i]);//printf("\n");count++;}}for(int i=0;i<=9;i++)if(vis[i]==0){vis[i]=1;//将用过的数标记 a[x]=i;//填数 DFS(x+1);//对下一个方格继续填数 vis[i]=0;//清除标记 }}int main(){count=0;DFS(1);printf("%d\n",count);return 0;}
1 0
原创粉丝点击