穷举法解数独

之前写过一个泛型栈,本例将利用这个泛型栈使用穷举法解数独游戏。基本思路是,通过数组建立两个矩阵,第一个保存数独题目,第二个保存哪些位置是题目给出的(置1),哪些位置是空白的需要解答的(置0)。通过初始化函数void sudoInit(int [9][9])对以上两个数组进行初始化。结构recorder用于记录通过验证的位置和答案,并将其入栈后遍历下一个位置,如此循环,最后得到解答。

关于泛型栈可参考:《C语言实现一个泛型栈》

更有效地算法参考:更智能的解数独算法,让效率提升5倍!

以下列出所定义的函数:

void sudoInit(int arr[9][9]);      // 初始化数独数组

int verSquare(int y, int x);        // 在9个小格组成的方块中验证(y, x)的值

int verRow(int y, int x);           // 在每行中验证(y, x)的值

int verCol(int y, int x);           // 在每列中验证(y, x)的值

int verify(int y, int x);           // 验证一个位置

int verifyAll();                    // 验证整个数组

void sudoPrt();                     // 输出

void next(int *y, int *x);          // 指向下一个位置

int sudoGo(int arr[9][9]);          // Go

以下是源码:

#include <stdio.h>
#include "stack.h"

static int sudo[9][9];         // 记录数独
static int sudo2[9][9];       // 记录给出的数字和待解答的位置

typedef struct
{
        int v;                          // 保存数字
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值