蓝桥杯—— 方格填数

方格填数

如下的10个格子
这里写图片描述
(如果显示有问题,也可以参看【图1.jpg】)

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

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

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

#include<iostream>
#include<cstring>
#include<cstdio> 
#include<cmath>
using namespace std;
int b[6][7];
int check(int x,int y)
{
    if(fabs(b[x][y]-b[x-1][y])==1||fabs(b[x][y]-b[x-1][y-1])==1||fabs(b[x][y]-b[x-1][y+1])==1||fabs(b[x][y]-b[x][y-1])==1||fabs(b[x][y]-b[x+1][y])==1||fabs(b[x][y]-b[x+1][y-1])==1||fabs(b[x][y]-b[x+1][y+1])==1||fabs(b[x][y]-b[x][y+1])==1)return 0;
    return 1;
}
int main()
{
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int ans=0,x=0;
    for(int i=0;i<=5;i++)
    {
        for(int j=0;j<=6;j++)
        {
            b[i][j]=-2;
        }
    }
    for(int i=0;i<10;i++)
    {

        for(int j=0;j<10;j++)
        {
            if(j==i)continue;
            for(int k=0;k<10;k++)
            {
                if(k==i||k==j)continue;
                for(int l=0;l<10;l++)
                {
                    if(l==i||l==j||l==k)continue;
                    for(int m=0;m<10;m++)
                    {
                        if(m==i||m==j||m==k||m==l)continue;
                        for(int n=0;n<10;n++)
                        {
                            if(n==i||n==j||n==k||n==l||n==m)continue;
                            for(int o=0;o<10;o++)
                            {
                                if(o==i||o==j||o==k||o==l||o==m||o==n)continue;
                                for(int p=0;p<10;p++)
                                {
                                    if(p==i||p==j||p==k||p==l||p==m||p==n||p==o)continue;
                                    for(int q=0;q<10;q++)
                                    {
                                        if(q==i||q==j||q==k||q==l||q==m||q==n||q==o||q==p)continue;
                                        for(int r=0;r<10;r++)
                                        {
                                            if(r==i||r==j||r==k||r==l||r==m||r==n||r==o||r==p||r==q)continue;
                                            b[1][2]=a[i];
                                            b[1][3]=a[j];
                                            b[1][4]=a[k];
                                            b[2][1]=a[l];
                                            b[2][2]=a[m];
                                            b[2][3]=a[n];
                                            b[2][4]=a[o];
                                            b[3][1]=a[p];
                                            b[3][2]=a[q];
                                            b[3][3]=a[r];
                                            for(int c=1;c<=3;c++)
                                            {
                                                int d=0,num=0;
                                                if(c==1)d++;
                                                for(;d<=4;d++)
                                                {/*cout<<x++<<"    "<<ans<<endl;*/
                                                    if(c==3&&d==4)
                                                    {
                                                        ans++;
                                                        break;
                                                    }
                                                    if(check(c,d))continue;
                                                    else{
                                                        num=1;
                                                        break;
                                                    }

                                                }
                                                if(num==1)break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

答案得1580

猜你喜欢

转载自blog.csdn.net/wanglin007/article/details/81367896