/*
标题:方格填数
在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如【图1.png】所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
请提交该整数,不要填写任何多余的内容(例如:说明性文字)。
*/
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define ll long long
int map[2][5];
int vis[20];
int count;
void check()
{
int i,j;
for (i=0;i<5;i++)
if (map[0][i]>map[1][i])
return;
for (i=1;i<5;i++)
if ((map[0][i-1]>map[0][i])||(map[1][i-1]>map[1][i]))
return;
for (i=0;i<2;i++)
for (j=0;j<5;j++)
printf("%d ",map[i][j]);
printf("\n");
count++;
}
void dfs(int n)
{
int i;
if (n ==10)
check();
for (i=0;i<10;i++)
if (!vis[i])
{
vis[i]=1;
map[n/5][n%5]=i+1;
dfs(n+1);
vis[i]=0;
}
}
int main()
{
memset(vis,0,sizeof(vis));
dfs(0);
printf("%d\n",count);
return 0;
}
方格填数
最新推荐文章于 2024-04-10 15:31:15 发布