【计算机算法设计与分析】九宫格问题/三阶幻方问题(C++_回溯法)

本文介绍了如何使用回溯算法解决九宫格问题,即在3x3网格中填入1-9不重复数字,确保每行、每列和对角线和为15。算法通过递归实现,设置结束条件和循环体,利用vis数组记录已使用的数字。

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

问题描述

使用回溯算法计算九宫格问题的所有可行解,九宫格问题是指在 3×3 的网格中填入 1-9 个不重复的数字,同时满足以下条件:九宫格问题是指在 3×3 的网格中填入 1-9 个不重复的数字,并满足每行、每列或每条对角线上的所有元素之和都是 15。请注意,每个数字只能出现一次。
在这里插入图片描述

算法原理

回溯法,直白点说其实就是一个尝试一切可能的递归算法,也就是一种深度优先搜索算法,它的编写也满足递归的两个要点:结束条件和循环体。

  • 结束条件(m==9):九个位置都已经填满数字了,再判断是否满足幻方要求即可,不满足就回溯继续,满足就先输出再回溯;
  • 循环体:整个递归函数在不断循坏给每个位置赋值,而中间的for循环就是不断实验给他赋什么值,而且由于整个九宫格中出现的数字不能重复,所有加了vis数组记录哪几个数字已经出现过了。

算法实现

#include <bits/stdc++.h>
using namespace std;
int g[9], vis[10]; //g[i]表示所有

bool judge() {
   
	if (g[0] + g[1] + g[2] == 15 &&
		g[3] + g[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaoql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值