九宫格问题
来源:互联网 发布:mac装windows虚拟机 编辑:程序博客网 时间:2024/05/19 13:24
九宫格最早叫“洛书”,现在也叫“幻方”。要求纵向、横向、斜向上的三个数字之和等于15,而且1-9这9个数字不能重复。现在我们创建一个n(n为奇数)维矩阵,要求矩阵中数字为0-n2之间的数,且纵向、横向、斜向上三个数字之和相等。
解九宫格的方法有很多,这里使用Merzirac法:
一居上行正中央,依次斜填切莫忘;上出框界往下写,右出框时左边放;重复便在下格填,出角重复一个样。即:
(1) 在第一行居中的方格内放1,依次右上方填入2,3,4…;
(2) 如果这个数所要放的格已经超出了顶行,那么就把它放在此格的底行;
(3) 如果这个数所要放的格已经超出了最右列,那么就把它放在此格的最左列;
(4) 如果这个数所要放的格已经有了数字,那么就把它放在上一个数所在格的下一格;
(5) 如果右上方有数字出了对角线,则和重复(即第4步)一样处理。
核心代码如下:
int[][] sudoku(int n) { // n为维数int [][] a= new int[n][n];int row=0, col=n/2;for (int i=1; i<=n*n; ++i) {a[row][col] = i; --row; // 设定行数从上往下递增,列数从左往右递增 依次斜填++col;if (row<0 && col==n) { // 出角的情况++row; // 先返回上一格--col;++row; // 再下移一格}else if (col == n) { // 右出框时左边放col = 0;}else if (row < 0) { // 上出框界往下写row = n-1;}else if (a[row][col] > 0) { // 重复的情况,处理方式和出角相同++row;--col;++row;}} return a;}
运行结果:
0 0
- 九宫格问题
- 九宫格问题
- 九宫格问题
- 九宫格问题
- 九宫格问题
- 九宫格问题
- 九宫格为问题
- java编程-九宫格问题
- Sudoku(九宫格问题)
- [2016/11/25]九宫格问题
- cocos2dx 九宫格 shader失效的问题
- 九宫格
- 九宫格
- 九宫格
- 九宫格
- 九宫格
- 九宫格
- 九宫格
- 深入理解 new 的运行机制
- 运算符重载-编程题#1(C++程序设计第4周)
- 3-6 网络编程理论回顾
- 欢迎使用CSDN-markdown编辑器
- 【UE4】 第09讲 【MOBA制作日记】 隐藏默认创建的DefaultPawn
- 九宫格问题
- ImageNet Classification with Deep Convolutional Neural Networks简介
- poj1195 Mobile phones(二维树状数组)
- 深入理解函数的作用域
- 1007. 素数对猜想 (20)
- 运算符重载-编程题#2(C++程序设计第4周)
- 索引综述
- Bellman-Ford的队列优化
- UVA 10214 Trees in a Wood. (欧拉函数)