蓝桥杯-四阶幻方(DFS)
标题:四阶幻方 把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。 四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。
比如: 以及: 就可以算为两种不同的方案。 请提交左上角固定为1时的所有方案数字,不要填写任何多余内容或说明文字。
记:
一开始直接用dfs搜索,发现时间太长,于是找规律
发现,幻方的值,为1累加到16的和除以阶数4
(所以类似的n阶幻方也可以这么做?)
另外一个3阶的题目用同样方法也行
http://www.cnblogs.com/mind000761/p/8595390.html
从而添加剪枝操作后,运行时间约1min
示例代码:
#include <stdio.h>
#define MAX 16 /*可放置的最大数*/
#define N 4 /*阶数*/ int key = ; /*1到MAX的累加和除以MAX*/
int count = ; /*满足条件的解*/
int arr[N+][N+] = {};
int f[MAX+] = {}; void dfs(int x)
{
int i,j,k,s; /*s用于剪枝操作*/ if (x > MAX)
{
i = arr[][]+arr[][]+arr[][]+arr[][];
j = arr[][]+arr[][]+arr[][]+arr[][];
if (i != key || j != key)
{
return;
}
for (i = ; i <= N ; i ++)
{
s = ;
for (j = ; j <= N ; j ++)
{
s += arr[j][i];
}
if (s != key)
{
return;
}
} count ++;
return;
} for (i = ; i <= MAX ; i ++)/*遍历2-MAX*/
{
if (!f[i])
{
for (j = ; j <= N ; j ++)
{
s = ;
for (k = ; k <= N ; k ++)
{
if (!arr[j][k])
{
f[i] = ;
arr[j][k] = i;
break;
}
s += arr[j][k];
}
if (f[i])
{
break;
}
if (s != key)
{
return;
}
}
dfs(x+);
arr[j][k] = ;
f[i] = ;
}
} return ;
} int main(void)
{
f[] = ;
arr[][] = ;
dfs();
printf("%d",count);/**/
return ;
}
蓝桥杯-四阶幻方(DFS)的更多相关文章
- java实现第六届蓝桥杯四阶幻方
四阶幻方 把1~16的数字填入4x4的方格中,使得行.列以 及两个对角线的和都相等,满足这样的特征时称 为:四阶幻方. 四阶幻方可能有很多方案.如果固定左上角为1 ,请计算一共有多少种方案. 比如: ...
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯 倍数问题(dfs,枚举组合数)
标题:倍数问题 [题目描述]众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n 个数 ...
- 2018蓝桥杯 全球变暖(dfs)
你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示:........##.....##........##...####....###.. ...
- 蓝桥杯 地宫寻宝 DFS 动态规划
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cstdl ...
- 蓝桥杯 剪邮票 DFS (不错的题目)
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- 蓝桥杯 正则问题(dfs)
1607: 正则问题 时间限制: 1 Sec 内存限制: 256 MB提交: 34 解决: 13[提交][状态][讨论版] 题目描述 考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达 ...
- 蓝桥杯 - 带分数 (DFS)
历届试题 带分数 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 100 能够表示为带分数的形式:100 = 3 + 69258 / 714. 还能够表示为:10 ...
- 蓝桥杯-铺瓷砖(dfs)
问题描述 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一 ...
随机推荐
- HDU - 5421:Victor and String (回文树,支持首尾插入新字符)
Sample Input 6 1 a 1 b 2 a 2 c 3 4 8 1 a 2 a 2 a 1 a 3 1 b 3 4 Sample Output 4 5 4 5 11 题意:多组输入,开始字符 ...
- css的标准模型和低版本的IE的盒子模型有什么不同?
1. css的盒子模型:外边距(margin).内边距(padding).边界(border).内容区(width和height) 标准的css盒子模型与低版本的ie盒子模型的不同:宽高不一样 标准的 ...
- Laravel学习--时间
date("Y-m-d H:i:s"); list($usec, $sec) = explode(" ", microtime()); $time = (flo ...
- 通过更改服务器解决双系统ubuntu时间+8
安装ntpdate: sudo apt-get install ntpdate 设置校正服务器: sudo ntpdate time.windows.com 设置硬件时间为本地时间: sudo hwc ...
- python------模块定义、导入、优化 ------->re模块
该部分内容引用自:http://www.cnblogs.com/alex3714/articles/5161349.html 谢谢原博主的文章,只是自己学习,无其他使用. re模块 常用正则表达式符号 ...
- 【BZOJ2594】【WC2006】水管局长
日……又被傻B错坑了一整天…… 原题: SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要 ...
- 将koa+vue部署到服务器
很久很久以前,就对前后端如何分离,后端如何把代码部署到服务器有浓厚的兴趣,最近在阿里云上申请了一个服务器,试试水吧! 本文参考了文章<基于Node的Koa2项目从创建到打包到云服务器指南> ...
- CSV文件保存为utf8编码格式
csv格式文件经常用来批量导入数据到某些应用中,但是经常出现utf8乱码问题,那么该如何解决呢? WPS找不到编码格式设置,微软的office软件有,不过我使用的是libreoffice 步骤如下 1 ...
- Android 工具视频学习笔记_WDS
1. 由于Android源码过于庞大,SourceInsight会经常卡死,不适合了.适合的是Android Studio, 非常好用.使用手册上有介绍如何安装. 编译安卓的过程说明手册中也有. 3. ...
- PHP用curl发送get post put delete patch请求
function getUrl($url){ $headerArray = array("Content-type:application/json;", "Accept ...