大哥,帮忙解个题,类似数独吧

四级用户 二宝 8天前 1056

谢谢哥

微信图片_20241211201424.jpg


上一篇:气坏了,被暴雪的设计师玩弄了
下一篇:为了更新2.4b18的金手指功能,老将又要出山了!
热门回复
  • 四级用户 sakurachan 8天前
    4
    [1, 5, 4, 2, 3]
    [4, 2, 3, 1, 5]
    [3, 1, 5, 4, 2]
    [5, 4, 2, 3, 1]
    [2, 3, 1, 5, 4]
  • 四级用户 sakurachan 8天前
    3

    要解决这个填数问题,我们可以使用回溯法。这种方法通过尝试每一种可能的数字组合,并在发现冲突时回溯到前一步来寻找其他可能性。

    给定如下5x5网格:

    [[1, 0, 0, 2, 0],
     [0, 0, 3, 0, 0],
     [0, 0, 0, 4, 0],
     [5, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]]

    我们要填充所有的空位,使得每行、每列和对角线都不重复。

    下面是一段实现上述问题的Python代码:

    def is_valid(grid, row, col, num):
        for i in range(5):
            if grid[row][i] == num or grid[i][col] == num:
                return False
            
        if row == col:
            for i in range(5):
                if grid[i][i] == num:
                    return False
    
        if row + col == 4:
            for i in range(5):
                if grid[i][4 - i] == num:
                    return False
    
        return True
    
    def solve_puzzle(grid):
        def backtrack(row, col):
            if row == 5:
                results.append([row[:] for row in grid])
                return
            
            next_row = row + (col + 1) // 5
            next_col = (col + 1) % 5
    
            if grid[row][col] != 0:
                backtrack(next_row, next_col)
            else:
                for num in range(1, 6):
                    if is_valid(grid, row, col, num):
                        grid[row][col] = num
                        backtrack(next_row, next_col)
                        grid[row][col] = 0
        
        results = []
        backtrack(0, 0)
        return results
    
    # Initial Grid
    grid = [
        [1, 0, 0, 2, 0],
        [0, 0, 3, 0, 0],
        [0, 0, 0, 4, 0],
        [5, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ]
    
    solutions = solve_puzzle(grid)
    for solution in solutions:
        for row in solution:
            print(row)
        print()

    代码说明:

    • is_valid函数用于判断在给定的位置(row, col)填入数字num是否符合规则(即该行、该列和两个主对角线上没有重复的数字)。
    • solve_puzzle函数包含在第一步定义的backtrack子函数,后者负责以回溯的方式遍历所有可能的解。
    • 网格中的初始状态填充为给定的固定数字以及零表示待填充位置。
    • backtrack函数依次尝试为每个空位填入从1到5的数字,如果当前选择导致约束条件不合法,便回溯进行下一个尝试。
    • 最终,所有满足条件的解会被保存在results列表中并打印出来。


    • 老男人游戏网配套论坛
      27
        立即登录 立即注册
最新回复 (25)
  • 四级用户 sakurachan 8天前
    4 2
    [1, 5, 4, 2, 3]
    [4, 2, 3, 1, 5]
    [3, 1, 5, 4, 2]
    [5, 4, 2, 3, 1]
    [2, 3, 1, 5, 4]
  • 四级用户 二宝 8天前
    0 3
    sakurachan [1, 5, 4, 2, 3] [4, 2, 3, 1, 5] [3, 1, 5, 4, 2] [5, 4, 2, 3, 1] [2, 3, 1, 5, 4]
    怎么解的哥
  • 管理员 Oldman 8天前
    0 4
    二宝 怎么解的哥
    1右边肯定是5,5和3中间那个肯定是1,就这个思路,一点一点做出来
  • 四级用户 sakurachan 8天前
    0 5
    二宝 怎么解的哥
    懒得动脑,让AI给写了一段代码算的。
  • 五级用户 乱月 8天前
    0 6

    噢,忘记还有对角线了

  • 四级用户 sakurachan 8天前
    0 7
    乱月 噢,忘记还有对角线了
    对角线
  • 四级用户 sakurachan 8天前
    3 8

    要解决这个填数问题,我们可以使用回溯法。这种方法通过尝试每一种可能的数字组合,并在发现冲突时回溯到前一步来寻找其他可能性。

    给定如下5x5网格:

    [[1, 0, 0, 2, 0],
     [0, 0, 3, 0, 0],
     [0, 0, 0, 4, 0],
     [5, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]]

    我们要填充所有的空位,使得每行、每列和对角线都不重复。

    下面是一段实现上述问题的Python代码:

    def is_valid(grid, row, col, num):
        for i in range(5):
            if grid[row][i] == num or grid[i][col] == num:
                return False
            
        if row == col:
            for i in range(5):
                if grid[i][i] == num:
                    return False
    
        if row + col == 4:
            for i in range(5):
                if grid[i][4 - i] == num:
                    return False
    
        return True
    
    def solve_puzzle(grid):
        def backtrack(row, col):
            if row == 5:
                results.append([row[:] for row in grid])
                return
            
            next_row = row + (col + 1) // 5
            next_col = (col + 1) % 5
    
            if grid[row][col] != 0:
                backtrack(next_row, next_col)
            else:
                for num in range(1, 6):
                    if is_valid(grid, row, col, num):
                        grid[row][col] = num
                        backtrack(next_row, next_col)
                        grid[row][col] = 0
        
        results = []
        backtrack(0, 0)
        return results
    
    # Initial Grid
    grid = [
        [1, 0, 0, 2, 0],
        [0, 0, 3, 0, 0],
        [0, 0, 0, 4, 0],
        [5, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ]
    
    solutions = solve_puzzle(grid)
    for solution in solutions:
        for row in solution:
            print(row)
        print()

    代码说明:

    • is_valid函数用于判断在给定的位置(row, col)填入数字num是否符合规则(即该行、该列和两个主对角线上没有重复的数字)。
    • solve_puzzle函数包含在第一步定义的backtrack子函数,后者负责以回溯的方式遍历所有可能的解。
    • 网格中的初始状态填充为给定的固定数字以及零表示待填充位置。
    • backtrack函数依次尝试为每个空位填入从1到5的数字,如果当前选择导致约束条件不合法,便回溯进行下一个尝试。
    • 最终,所有满足条件的解会被保存在results列表中并打印出来。


  • 四级用户 yousei 8天前
    0 9
    蚌埠住了,这能叫对角线,而且题目还真是这意思,傻傻用候选数法搞了半天都没搞出来
  • 四级用户 二宝 8天前
    0 10
    sakurachan 要解决这个填数问题,我们可以使用回溯法。这种方法通过尝试每一种可能的数字组合,并在发现冲突时回溯到前一步来寻找其他可能性。给定如下5x5网格:[[1, 0, 0,& ...
    神仙。。羡慕学计算机的
  • 四级用户 数码猎人 8天前
    0 11
    sakurachan 要解决这个填数问题,我们可以使用回溯法。这种方法通过尝试每一种可能的数字组合,并在发现冲突时回溯到前一步来寻找其他可能性。给定如下5x5网格:[[1, 0, 0,& ...
    牛逼
  • 四级用户 二宝 8天前
    0 12
    Oldman 1右边肯定是5,5和3中间那个肯定是1,就这个思路,一点一点做出来
    1的右边我知道不能是1.2,为啥肯定是5🥺
  • 四级用户 二宝 8天前
    0 13
    Oldman 1右边肯定是5,5和3中间那个肯定是1,就这个思路,一点一点做出来
    我只知道,4下面肯定是3
  • 五级用户 WGZxsunny 8天前
    0 14
    [1, 4, 5, 2, 3]
    [4, 1, 3, 5, 2]
    [2, 3, 1, 4, 5]
    [5, 2, 4, 3, 1]
    [3, 5, 2, 1, 4]
  • 管理员 Oldman 8天前
    0 15
    二宝 1的右边我知道不能是1.2,为啥肯定是5🥺
    不能填3和4,斜线已经有3和4了
  • 四级用户 二宝 8天前
    0 16
    Oldman 不能填3和4,斜线已经有3和4了
    啊?好吧,这个也叫对角线吗🥶
  • 六级用户 进站劣人 8天前
    0 17
    感觉就是数独。
  • 四级用户 d_boy_ 8天前
    1 18

    5格可以偷懒,数字周围一圈不能存在自己,找靠近外圈的数字缩小范围,优先靠近“?”的。

    4的横竖斜方向不能有4,E2、E3、E4不能有4,那么E1、E5必有4,
    3的横竖斜方向不能有3,B1、C1、D1不能有3,那么E1必须是3,E5只能是4,

  • 三级用户 jianghan0303 7天前
    0 19
    sakurachan 要解决这个填数问题,我们可以使用回溯法。这种方法通过尝试每一种可能的数字组合,并在发现冲突时回溯到前一步来寻找其他可能性。给定如下5x5网格:[[1, 0, 0,& ...
    你是个狠人呀
  • 四级用户 mrchangkun 7天前
    0 20

    其实数独非常简单,知道原理后脑力运动就变成了体力运动,其实就是不断的穷举去异的重复动作。

    IMG_1530.png

    • 老男人游戏网配套论坛
      27
        立即登录 立即注册
发新帖
本论坛禁止发布SWITCH和PS4相关资源,若有其他侵权内容,请致邮3360342659#qq.com(#替换成@)删除。