方格填数 dfs问题
如图,如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?
请填写表示方案数目的整数。
请教一下我的代码有什么问题???
#include<iostream>
#include<cmath>
using namespace std;
int a[3][4]={0,1,1,1,1,1,1,1,1,1,1,0};
int count=0,vis[3][4]={0};
void dfs(int a1,int b1,int count1)
{
if(count1==10)
{
count++;
}
if(a[a1][b1]!=0)
{
int dir[8][2]={0,1,1,0,-1,0,0,-1,1,1,-1,-1,-1,1,1,-1};
for(int i=0;i<=3;i++)
{
int x=a1+dir[i][0];
int y=b1+dir[i][1];
for(int k=0;k<=9;k++)
{
a[x][y]=k;
if(abs(a[x][y]-a[1][b1])!=1&&vis[x][y]==0&&x<=3&&x>=0&&y>=0&&y<=4)
{
vis[x][y]=1;
dfs(x,y,count1+1);
}
}
}
}
}
int main()
{
for(int i=0;i<=9;i++)
{
a[0][1]=i;
vis[0][1]=1;
dfs(0,1,1);
}
cout<<count<<endl;
return 0;
}