2015第六届蓝桥杯决赛--方格填数(DFS)

标题:方格填数

在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。

如【图1.png】所示的2种,就是合格的填法。

请你计算一共有多少种可能的方案。

请提交该整数,不要填写任何多余的内容(例如:说明性文字)。



思路:

先填满整个表,然后再判断是否符合条件,

#include<stdio.h>
#include<math.h>
int map[3][6];
int flag[15];
int sum=0;
int flag1=0;
int check()
{
    int i,j;
    for(i=0;i<2;i++)
        for(j=0;j<5;j++)
    {
    if((map[i][j]>map[i][j+1]) || (map[i][j]>map[i+1][j]))
        return 0;
    }
    return 1;
}
void dfs(int count)
{
    int i,j;
    if (count==10)
    {
        if(check())
        {
            for(i=0;i<2;i++)
            {
            for(j=0;j<5;j++)
            printf("%d ",map[i][j]);
        printf("\n");
            }
            printf("\n");
        sum++;
        }
        return;
    }
    {
        for(i=1;i<=10;i++)
        {
            if(!flag[i])
            {
                flag[i]=1;
                map[count/5][count%5]=i;
                dfs(count+1);
                flag[i]=0;
            }
        }
    }
}
int main ()
{
    int i;
    map[0][5]=map[1][5]=100;
    for(i=0;i<5;i++)
        map[2][i]=100;

    dfs(0);
    printf("%d\n",sum);
    return 0;
}




版权声明:本文为kavu1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。