随机数独游戏的算法设计 (Sudoku)steemCreated with Sketch.

in cn •  2 years ago  (edited)

sudoku-solver 数独游戏 Sudoku

给定一个数独(Sudoku),我们可以使用深度优先搜索算法(DFS)、迭代加深搜索算法(IDS)或广度优先搜索算法(BFS)来寻找可能的解。反过来,如果我们要设计一个算法来生成有效的数独,我们需要澄清以下问题:

  • 生成的数独(Sudoku)必须有可解状态吗?是的
  • 生成的数独(Sudoku)有多个解吗?我们可以假设返回的Suduoku只有1个唯一解
  • 生成的数独(Sudoku)的找解难度?我们可以为此设置一个参数:简单、中等或困难

一共有6.671x10^21个有效的数独状态,如果我们忽略旋转、镜像状态等重复的状态,这个数字就降到了5.4x10^9个状态。我们可以随机生成一个由数字1-9填充的矩阵,并检查它是否是有效的数独,但这非常低效,因为生成的矩阵极有可能不是有效的数独。

设计一个随机数独的算法


为了设计一个有效的算法,生成一个随机的有效数独,我们可以采用以下算法:

  1. 使用回溯(深度优先搜索)算法来生成一个具有随机性的有效完整数独。例如,我们可以随机选择数字,而不是尝试按顺序填充1到9的数字。
  2. 每次删除一个随机数字。
  3. 检查数独状态是否可解且只包含一个解决方案(我们可以使用深度优先搜索算法/回溯或广度优先搜索算法)。
  4. ​如果是,则继续执行步骤2,直到我们删除N个数字。删除的数字的个数对应于难度级别。删除更多数字会使数独状态更难。
  5. 如果它既不可解也没有一个解决方案,我们必须将数字放回去,然后重试另一个随机数字(步骤2)。

这是来自ChatGPT 3.5(Open AI + Microsoft Azure)的答案:

  1. 创建一个9x9的网格,并用数字1到9填充它。
  2. 随机选择一个数字并将其删除。
  3. 重复步骤2,直到从网格中删除所有数字。
  4. 检查网格是否是一个有效的数独。
  5. 如果网格是有效的数独,则将其作为解决方案返回。
  6. 否则,则重复步骤2-5,直到找到一个有效的解决方案。

英文: Teaching Kids Programming - How to Design a Random Sudoku? Algorithm to Design a Random Sudoku

英文: Teaching Kids Programming - How to Design a Random Sudoku? Algorithm to Design a Random Sudoku
中文: 随机数独游戏的算法设计 (Sudoku)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
  ·  2 years ago 

!test !thumbup

Hello @ericandryan! You are Incredible!


command: !thumbup is powered by witness @justyy and his contributions are: https://steemyy.com
More commands are coming!

  ·  2 years ago 

!ask What is rate limiting API?

Rate limiting API is a feature of an application programming interface (API) that limits the number of requests that can be made from a particular client in a given time period. The main purpose of rate limiting is to protect an API from malicious or careless users who may submit too many requests and overload it. This type of protection is often used to prevent denial-of-service attacks, and it can also be used as a way to manage access to limited resources.


command: !ask is powered by witness @justyy and his contributions are: https://steemyy.com
More commands are coming!. !ask is currently based on ChatGPT-3.5