什么是表示数独谜题的智能数据结构?即一个9x9的正方形,每个“单元格”包含数字或空白。
特别考虑以下几点:
特别考虑以下几点:
- 可以跨行、列和3x3“组”进行比较
- 易于实现(特别是在Python中)
- 效率(不是关键因素)
N
,而N
已经存在于其行/列/小方块的其他位置,则删除该可能性。
- 如果行/列/小方块中有两个单元格,它们具有相同的两个可能性(而没有其他可能性),则应从该行/列/小方块中的所有其他单元格中删除该可能性。123 456 789
456 789 123
789 123 456
234 567 891
567 891 234
891 234 567
345 678 912
678 912 345
912 345 678
然后,在一个大小不同的循环中(至少为500),以一种不会产生无效拼图的方式交换行和列。换句话说,将行或列与它们所在的组交换(例如,行1、2和3是一组,列4、5和6也是一组)。其他人已经合理地建议使用2D数组。
我注意到,在大多数语言实现中,“数组的数组X”遭受额外的访问时间开销(一次访问顶层数组,第二次访问子数组)。
我建议您将数据结构抽象地实现为2D数组(甚至可以继续使用2个索引),但将数组实现为单个81个单元的块,经典地由i * 9 + j索引。这给您概念上的清晰度,并通过避免第二个内存访问而实现了更高效的实现。
您应该能够将1D数组访问隐藏在采用2D索引的setter和getter后面。如果您的语言具有此功能(不知道Python是否如此),这些小方法可以进行内联以获得额外的速度。