在2行5列的格子中填入1到10的数字。
要求:
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
例子如图所示
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define ll long long
int map[2][5];
int vis[20];
int cnt;
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");
cnt++;
}
void dfs(int cur)
{
int i;
if (cur==10)
check();
for (i=0;i<10;i++)
if (!vis[i])
{
vis[i]=1;
map[cur/5][cur%5]=i+1;
dfs(cur+1);
vis[i]=0;
}
}
int main()
{
memset(vis,0,sizeof(vis));
dfs(0);
printf("%d\n",cnt);
return 0;
}