算法OJ—回溯(二)_三阶幻方

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值