您的位置:首页 > 编程语言 > C语言/C++

第七届蓝桥杯C++B组 方格填数

2018-03-22 13:16 274 查看
方格填数如下的10个格子填入0~9的数字。     (如果显示有问题,也可以参看【图1.jpg】)
     +--+--+--+
      |    |     |     |
+--+--+--+--+
 |    |     |    |     |
+--+--+--+--+
 |    |     |    |
+--+--+--+


要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

思路:看到0~9数字我就想到了全排列hhhhh虽然我知道这样判断条件会有毒了一点……答案:1580#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;

int main()
{
int num[10]={0,1,2,3,4,5,6,7,8,9};
int ans=0;
do
{
if(abs(num[0]-num[1])==1 || abs(num[0]-num[3])==1 || abs(num[0]-num[4])==1 || abs(num[0]-num[5])==1 || abs(num[1]-num[2])==1 || abs(num[1]-num[4])==1 || abs(num[1]-num[5])==1 || abs(num[1]-num[6])==1 || abs(num[2]-num[5])==1 || abs(num[2]-num[6])==1 || abs(num[3]-num[4])==1 || abs(num[3]-num[7])==1 || abs(num[3]-num[8])==1 || abs(num[4]-num[5])==1 || abs(num[4]-num[7])==1 || abs(num[4]-num[8])==1 || abs(num[4]-num[9])==1 || abs(num[5]-num[6])==1 || abs(num[5]-num[8])==1 || abs(num[5]-num[9])==1 || abs(num[6]-num[9])==1 || abs(num[7]-num[8])==1 || abs(num[8]-num[9])==1)
continue;
else
ans++;
}while(next_permutation(num,num+10));
cout<<ans<<endl;
return 0;
}PS:也可以用dfs解决,传送地址:http://blog.csdn.net/y1196645376/article/details/50938608
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  全排列 dfs