蓝桥杯 标题:方格填数

在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种。

猜你喜欢

转载自blog.csdn.net/weixin_39787873/article/details/80231565