在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
请你计算一共有多少种可能的方案。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如【图1.png】所示的2种,就是合格的填法。
请提交该整数,不要填写任何多余的内容(例如:说明性文字)。
#include<iostream> using namespace std; int sum=0; int a[11]={0}; int visit[11]={0}; bool dfs(int cur) { if(cur==9) { for(int i=2;i<=9;i++) if(visit[i]==0) { a[cur]=i; break; } if(a[cur]>a[cur-1]&&a[cur]>a[cur-5]) { sum++; return true; } return false; } for(int j=2;j<=9;j++) { if(visit[j]==0) { a[cur]=j; visit[j]=1; if(cur>5) { if(cur!=6) { if(a[cur]>a[cur-5]&&a[cur]>a[cur-1]) { if(dfs(cur+1)) { visit[j]=0; continue; } } } else { if(dfs(cur+1)){ visit[j]=0; continue; } } } else { if(a[cur]>a[cur-1]) { if(dfs(cur+1)) { visit[j]=0; continue; } } } visit[j]=0; } } return false; } int main() { visit[1]=visit[10]=1; a[1]=1;a[10]=10; dfs(2); cout<<sum<<endl; return 0; }42种。