标题:方格填数
在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如【图1.png】所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
在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;
}