数独 九宫格 破解

本文介绍如何使用C语言编写数独九宫格的破解算法。通过递归方式,结合二维数组表示9x9方阵,判断并填充每个位置的数字,确保行列宫格无重复。程序执行后输出解决方案或提示无解。
摘要由CSDN通过智能技术生成

说到数独,或者九宫格,我想大家一定都不陌生,初中高中看的各种杂志上都有这种益智游戏,现在的智能手机上也有人写出了这种游戏,闲暇时候玩玩也能活跃一下脑子。还有看《模仿游戏》这部电影里面,图灵在选拔队友的时候好像出的也是数独的题目。


我本来对数独不是太感兴趣,但是一个偶然的机会看到朋友在玩这个游戏,就想写出一个破解算法,来在朋友面前炫耀一下,也可以顺便复习一下最近学习的C语言。


数独事实上就是一个9*9的一个方阵,之所以又叫九宫格,是因为其中每3*3的方阵为一宫,整个大方阵有九个这样的宫。规则是在每一行每一列填上1~9九个数字,使得各行各列填满且不重复,并且每一宫中的数字也是1~9不重复。


对于算法来讲,主要使用递归,对于数据结构来讲,用二维数组来表示9*9的方阵,然而每一个位置都有两个属性,即数值和所在的宫,所以一开始我先声明了一个结构体来包含这两个属性。然后用一个分配算法来分配各个位置的数字所在的宫。具体的破解算法其实就是让程序去测试每一个位置该填什么数字,需要判断每一行,每一列,每一宫是否有重复,都没有重复则表示成功。如果成功则保留,不成功则退回重新测试。通过输入原始数据来让程序运行,程序执行后如果有解则输出方阵,如果没有则输出无解。具体程序如下(C语言):

#include<stdio.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4996)
#define N 9
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值