01蓝桥杯第七届 方格填数(dfs)

Posted passion27

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01蓝桥杯第七届 方格填数(dfs)相关的知识,希望对你有一定的参考价值。

 

方格填数

如下的10个格子 
+–+–+–+–+ 
| # | ? | ? | ? | 
+–+–+–+–+ 
| ? | ? | ? | ? | 
+–+–+–+–+ 
| ? | ? | ? | # | 
+–+–+–+–+

#:不能填数字;?:需要填写数字的空格 
填入0~9的数字。要求:连续的两个数字不能相邻。 
(左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。 
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 

 

#include<iostream>
#include <algorithm>  
//#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
bool check()
{
	if (abs(a[0] - a[1]) == 1 || abs(a[1] - a[2]) == 1)return false;
	if (abs(a[3] - a[4]) == 1 || abs(a[4] - a[5]) == 1 || abs(a[5] - a[6]) == 1)return false;
	if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1)return false;
	if (abs(a[3] - a[0]) == 1)return false;
	if (abs(a[1] - a[4]) == 1 || abs(a[4] - a[7]) == 1)return false;
	if (abs(a[2] - a[5]) == 1 || abs(a[5] - a[8]) == 1)return false;
	if (abs(a[6] - a[9]) == 1)return false;
	if (abs(a[3] - a[8]) == 1)return false;
	if (abs(a[4] - a[9]) == 1)return false;
	if (abs(a[0] - a[5]) == 1 || abs(a[1] - a[6]) == 1)return false;
	if (abs(a[3] - a[7]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[4] - a[8]) == 1)return false;
	if (abs(a[1] - a[5]) == 1 || abs(a[9] - a[5]) == 1 || abs(a[2] - a[6]) == 1)return false;
	return true;
}
int main()
{
	
	int ans = 0;
	do {
		if (check())
			ans++;
	} //while (next_permutation(a, a + 10));
	while (next_permutation(a, a + 10));
	cout << ans;
}

  

以上是关于01蓝桥杯第七届 方格填数(dfs)的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答

第七届蓝桥杯CC++B组省赛题目——方格填数

16年第七届蓝桥杯第三题_

算法笔记_122:蓝桥杯第七届省赛(Java语言A组)试题解答

16年第七届蓝桥杯第七题_剪邮票

算法笔记_213:第七届蓝桥杯软件类决赛部分真题(Java语言C组)