如下的10个格子
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include<iostream> #include<math.h> using namespace std; int a[5][5]={20}; int s=0; int vis[10]={0}; bool check(int num,int x,int y) { int i,j; for(i=-1;i<=1;i++) { for(j=-1;j<=1;j++) { int dx=x+i; int dy=y+j; if((dx==1&&dy==1)||(dx==3&&dy==4))continue; if(dx<1||dx>3||dy>4||dy<1)continue; if(dx==x&&dy==y)continue; if(fabs(num-a[dx][dy])<=1)return false; } } return true; } void dfs(int x,int y) { int i; if(x>3||y>4)return; if(x==3&&y==4) { s++; return; } for(i=0;i<=9;i++) { if(vis[i]==0&&check(i,x,y)) { vis[i]=1; //int m=a[x][y]; a[x][y]=i; if(y==4){ dfs(x+1,1); } else dfs(x,y+1); vis[i]=0; a[x][y]=20; //cout<<m<<endl; } } } int main() { for(int i=0;i<5;i++) for(int j=0;j<5;j++) { cout<<a[i][j]; } dfs(1,2); cout<<s<<endl; return 0; }