我使用C#编程语言给大家介绍相关的内容。
首先我们需要实现一个数独盘面的类型。
为了计算更快更合理,我们使用比特位来表示数据信息。我们使用0表示这个格子不包含这个候选数,而1表示这个格子包含这个候选数。那么一个格子可以使用9个比特位来表示一个完整的数据。比如001000100表示这个格子可以填入数字3和7。
问题来了。格子如果只剩下一个数字的话,提示数也可以是这样的情况,那么怎么去区分候选数唯一还是提示数信息呢?我们额外增加三个比特位来表示这个格子的状态。
我们使用1表示空格、2表示自己填入了一个数字,4表示提示数,那么一个单元格就需要12个比特位来表示具体的信息。一个盘面一共是81个格子,所以我们需要81个12个比特位的数据来表示。我们使用数组来完成。

我们使用C#的fixed关键字来指定一个数组,这样的话它会以缓冲区的模式来表达。当然如果别的语言没有的话,你可以使用private short _values = new short[81];的语法来完成。
首先我们需要实现一个数独盘面的类型。
为了计算更快更合理,我们使用比特位来表示数据信息。我们使用0表示这个格子不包含这个候选数,而1表示这个格子包含这个候选数。那么一个格子可以使用9个比特位来表示一个完整的数据。比如001000100表示这个格子可以填入数字3和7。
问题来了。格子如果只剩下一个数字的话,提示数也可以是这样的情况,那么怎么去区分候选数唯一还是提示数信息呢?我们额外增加三个比特位来表示这个格子的状态。
我们使用1表示空格、2表示自己填入了一个数字,4表示提示数,那么一个单元格就需要12个比特位来表示具体的信息。一个盘面一共是81个格子,所以我们需要81个12个比特位的数据来表示。我们使用数组来完成。

我们使用C#的fixed关键字来指定一个数组,这样的话它会以缓冲区的模式来表达。当然如果别的语言没有的话,你可以使用private short _values = new short[81];的语法来完成。