[蓝桥杯2015决赛]四阶幻方(DFS + 剪枝)
题目描述
把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。
四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。
比如:
1 2 15 16
12 14 3 5
13 7 10 4
8 11 6 9
1 12 13 8
2 14 7 11
15 3 10 6
16 5 4 9
就可以算为两种不同的方案。
输出
请提交左上角固定为1时的所有方案数字
题解:
1 #include <iostream>
2 using namespace std;
3 bool book[17];
4 int ans;
5 int average = 34;
6 int mp[5][5];
7
8 int jd(int i)
9 {
10 int sum = 0;
11 sum = mp[i][0] + mp[i][1] + mp[i][2] + mp[i][3];
12 return sum;
13 }
14 bool judge(){
15 int sum; //对角线
16 sum = mp[0][0] + mp[1][1] + mp[2][2] + mp[3][3];
17 if(sum != 34) return 0;
18 sum = mp[0][3] + mp[1][2] + mp[2][1] + mp[3][0];
19 if(sum != 34) return 0;
20 for(int i = 0; i < 4; ++ i)
21 if(jd(i) != average)
22 return 0;
23 for(int j = 0; j < 4; ++ j){
24 sum = mp[0][j] + mp[1][j] + mp[2][j]+ mp[3][j];
25 if(sum != 34)
26 return 0;
27 }
28 return 1;
29 }
30 void dfs(int n)
31 {
32 if (n == 16){
33 if(judge())
34 ans++;
35 return ;
36 }
37 if (n % 4 == 0){//剪枝
38 if (jd(n/4 - 1) != average)
39 return;
40 }
41 for(int i = 2; i < 17; ++ i){
42 if(!book[i]){
43 book[i] = 1;
44 mp[n/4][n%4] = i;
45 dfs(n + 1);
46 book[i] = 0;
47 }
48 }
49 }
50 int main()
51 {
52 mp[0][0] = 1;
53 dfs(1);
54 cout << ans << endl;
55 }
[蓝桥杯2015决赛]四阶幻方(DFS + 剪枝)的更多相关文章
- [蓝桥杯2015决赛]穿越雷区(BFS求最短路)
题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?已 ...
- 蓝桥杯—BASIC-27 2n皇后问题(DFS)
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- [蓝桥杯][2015年第六届真题]机器人塔(dfs)
题目描述 X星球的机器人表演拉拉队有两种服装,A和B. 他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A B A B A B ...
- [蓝桥杯]2015蓝桥省赛B组题目及详解
/*——————————————————————————————————————————————————————————— [结果填空题]T1 题目:奖券数目 有些人很迷信数字,比如带“4”的数字,认 ...
- 蓝桥杯 历届试题 剪格子 dfs
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...
- 蓝桥杯2015年省赛C/C++大学B组
1. 奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...
- 蓝桥杯 2015年省赛最后一题 生命之树(树形dp)
题目描述: 生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值.上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点 ...
- 蓝桥杯模拟赛-引爆炸弹-DFS+并查集
今天整理电脑,翻出来了很久以前大佬给的题,贴一下. 引爆炸弹 1000ms 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸 ...
- 第八届 蓝桥杯 7、正则问题 dfs
描述:正则问题 考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式.小明想求出这个正则表达式能接受的最长字符串的长度. 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串 ...
随机推荐
- 安卓开发:初步了解布局文件layout
了解完项目的目录结构,主要文件的作用之后. 了解完各常量文件的定义和使用之后,接下来的重头戏肯定是布局文件layout. 果然,网上关于“安卓布局文件layout”的各种介绍.解析.深入分析,等等资料 ...
- 使用URLConnection获取页面返回的xml数据
public static void main(String[] args) throws Exception { String path="http://flash.weather.com ...
- 201771010135杨蓉庆 《面对对象程序设计(java)》第九周学习总结
第7章 异常.日志.断言和调试 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一.理论知识 1.异常:在程 ...
- 寒假pta一
打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐 ...
- matplotlib学习(1)
1.基本学习(1)1.1 代码: import matplotlib.pyplot as plt import numpy as np x=np.linspace(-1,1,50) #从-1到1,共5 ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 高级索引
import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print (y) import n ...
- 【转】网关协议学习:CGI、FastCGI、WSGI、uWSGI
一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...
- 【原】jenkins知识点_凭据(一)
一:凭据 1.目的: 与第三方网站或应用程序进行交互,如代码仓库.云存储系统和服务等 2.操作路径: Jenkins-凭据-系统-全局凭据 3.权限 Jenkins 中保存的凭证可以用于: 任何适用于 ...
- 【PAT甲级】1003 Emergency (25 分)(SPFA,DFS)
题意:n个点,m条双向边,每条边给出通过用时,每个点给出点上的人数,给出起点终点,求不同的最短路的数量以及最短路上最多能通过多少人.(N<=500) AAAAAccepted code: #in ...
- Elasticsearch 6.8.4 启动报错解决方法
运行环境:centos 7,jdk 1.8 问题一: ERROR: bootstrap checks failed max ] ] 原因:无法创建本地文件问题,用户最大可创建文件数太小 解决方案:切换 ...