1579.三阶幻方
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
三阶幻方是最简单的幻方,又叫九宫格,是由1,2,3,4,5,6,7,8,9九个数字组成的一个三行三列的矩阵,其对角线、横行、纵向的的和都为15。
输入
无
输出
按字典序输出所有的满足条件的幻方矩阵,每两个数字之间带一个空格,行尾无空格,每个幻方后带一个空行。
输入样例
无
输出样例
无
本题同样是使用回溯思想完成,相比于生成二进制数01两个值,数字范围为0~9,但是每个数字只能使用一次,所以使用used[10]数组来存储0~9十个数字的状态,used[i] = 0为未使用,反之则为使用过的数字。使用二维数组a[3][3]存储幻方,m/3可以计算出行,m%3计算出对应的列,由此完成数位的存储。在m = 9 时候判断是否满足幻方的条件,满足则输出即可。
#include<iostream>
using namespace std;
int used[10] = {0};
int a[3][3];
void search(int m);
bool isOk();
void output();
int main(){
search(0);
return 0;
}
void search(int m){
int i;
if(m == 9){
if(isOk()){
output();
cout << endl;
}
}else{
for(i = 1; i <= 9; i++){
if(used[i] == 0){
a[m/3][m%3] =

本文介绍了如何使用回溯算法解决1579.三阶幻方和1324.穷举所有排列这两个问题。在三阶幻方中,通过维护used数组和二维数组a来确保数字的独特性和正确排列,当达到9时检查是否满足幻方条件并输出。全排列问题与三阶幻方类似,用回溯生成n个小写字母的所有排列。
最低0.47元/天 解锁文章
19万+

被折叠的 条评论
为什么被折叠?



