算法之美--2.3.3九宫格问题
Posted 小河沟大河沟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之美--2.3.3九宫格问题相关的知识,希望对你有一定的参考价值。
2016-12-13 00:28:19
还有口诀:“一居上行正中央,依次斜填切莫忘;上出框时向下放,右出框时向左放;排重便在下格填,右上排重一个样。” 这口诀不仅适用于九宫,也适用于推广的奇数九宫,如五五图,七七图等等.
「重排九宫」有两种玩法:
第一种是在在3×3方格盘上,是把1至8八个小木块随意摆放,每一空格其周围的数字可移至空格。玩者要将小木块按12345678的顺序重新排好,以最少的移动次数拼出结果者为胜。
第二种玩法如九宫格算术游戏玩法,推动木格中8个数字排列,横竖都有3个格,使每行、每列两个对角线上的三数之和都等于15。在计算的同时,还必须思考怎么把数字方块推动到相对应的位置上,这个游戏不仅仅考验人的数字推理能力,也同时考验了人的思维逻辑能力。
针对奇数阶数的幻方填写方法:
注意:二维数组指针的创建和释放。
v /*! * \file 九宫格问题.cpp * * \author ranjiewen * \date 十二月 2016 * * */ #include<iostream> #include<iomanip> using namespace std; int main(int agrc, char **argv[]) { cout << "请输入幻方的小大n(大于1的奇数):" << endl; int n = 1; cin >> n; cout << endl; int **a = new int*[n]; for (int i = 0; i < n;i++) { a[i] = new int[n]; memset(a[i],0,n*sizeof(int)); } int row = 0; int col = n / 2; for (int i = 1; i <= n*n;i++) { a[row][col] = i; row--; col++; if (row<0&&col>=n) { col--; row += 2; } else if (row < 0) { row = n - 1; } else if (col>=n) { col = 0; } else if (a[row][col]!=0) { col--; row += 2; } } for (int i = 0; i < n;i++) { for (int j = 0; j < n;j++) { cout << setw(6) << a[i][j]; } cout << endl; } for (int i = n-1; i >0 ; i--) { delete[] a[i]; } delete[] a; return 0; }
以上是关于算法之美--2.3.3九宫格问题的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - 九宫格按键输入(JavaScript) | 机试题+算法思路+考点+代码解析 2023
每天刷个算法题20160526:BFS解决八数码问题(九宫格问题)