标题:方格填数
在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如【图1.png】所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
请提交该整数,不要填写任何多余的内容(例如:说明性文字)。
#include <bits/stdc++.h>
using namespace std;
long long cnt ;
int vis[2][6];
int use[11];
void dfs(int cur){
if(cur == 11){
cnt++;
for(int i = 0; i < 2; i++){
for(int j = 0; j < 6; j++)
cout << vis[i][j] <<" ";
cout << endl;
}
return;
}
for(int i = 1; i <=10; i++){
if(use[i]) continue;
else{
use[i] = 1;
if(cur <= 5){
vis[0][cur] = i;
if(i>vis[0][cur-1])
dfs(cur+1);
vis[0][cur] = -1;
}else{
vis[1][cur-5] = i;
if(i>vis[1][cur-6] && vis[1][cur-5] > vis[0][cur-5])
dfs(cur+1);
vis[1][cur-5] = -1;
}
use[i] = 0;
}
}
}
int main(){
memset(vis,-1,sizeof(vis));
dfs(1);
cout <<"答案为"<< cnt<<endl;
return 0;
}