四阶幻方的穷举求解.
来源:互联网 发布:淘宝代发怎么发货 编辑:程序博客网 时间:2024/06/10 17:04
速度太慢了,有时间研究构造四阶幻方的构造法…..
#include "iostream"#include "algorithm"#include "queue"#include "vector"#include "list"using namespace std;bool isused[17] = { false };int board[17];queue<int>x;#define M 34void print(int count){ cout << "case :" << count << endl; for (size_t beg = 1; beg != 17; beg+=4) { cout << board[beg] << " \t" << board[beg + 1] << "\t " << board[beg + 2] << " \t" << board[beg + 3]<<endl; } cout<< "====================================" << endl;}bool check(){ if (board[13] + board[14] + board[15] + board[16] != M) return false; return board[1] + board[6] + board[11] + board[16] == M&& board[4] + board[7] + board[10] + board[13] == M ? true : false;}void func(int n){ static int index = 0; if (n == 17) { if (check())//符合要求 print(++index); return; } if(n<=12) { int count = x.size(); while (--count!=-1)//使用队列里面现有的元素 { auto m = x.front(); x.pop(); board[n] = m; isused[m] = true; do { if (!(n % 4) && board[n] + board[n - 1] + board[n - 2] + board[n - 3] != M) break; if (n ==11 && board[n] + board[n - 1] + board[n - 4] + board[n - 5] != M) break; func(n + 1); } while (0); isused[m] = false; x.push(m); } } else { int m = M - board[n - 4] - board[n - 8] - board[n - 12]; if (m > 0 && m < 17 && !isused[m]) { board[n] = m; isused[m] = true; func(n + 1); isused[m] = false; } }}int main(){ for (size_t i = 1; i != 17; ++i) x.push(i); func(1); return 0;}
0 0
- 四阶幻方的穷举求解.
- 迷宫求解【穷举求解法】
- 带负数的数列,求解和最大的相邻子序列之三:穷举法
- Linuxc 下用穷举算法求解爱因斯坦的一个数学问题
- 穷举求解鸡兔同笼问题
- C语言:问题求解方法-穷举
- 基于递归的穷举
- 穷举排列组合的函数
- 穷举攻击的末路
- 穷举所有的双色球
- 穷举法的应用
- 穷举法迷宫求解简单实现(C)
- 穷举/动态规划 求解商品最优价格问题
- MATLAB求解24点(抱歉,只会穷举)
- 穷举算法求解鸡兔同笼问题(三)
- 穷举法求解鸡兔同笼问题
- 穷举
- 穷举
- 啊违法
- 排序 -- 思路简析(二)
- shell 基础 第二部分 ( cut ,sort, wc,uniq,tee ,tr)
- 第七节 独立按键之中断方式
- Label转成URL
- 四阶幻方的穷举求解.
- IDEA快捷键
- 基于NLPIR的lucene 自定义Analyzer实现类
- oracle rman全备恢复实践
- 网页漂浮窗
- 信息学奥林匹克竞赛-小鱼的航程(改进版)
- Mysql优化中遇到的问题和感受
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
- 图像处理中的卷积---2.高斯卷积