昭昭天命amg 发表于 2023-4-1 14:03:41

一个类似数独的迷宫问题(新开一贴)

https://t3.wodetu.cn/2023/04/01/6d4db72317c982bd333e315e341933b3.jpg
感觉用回溯算法应该能实现,我有点思路,但是代码实现不了,求大神指点
之前图片太糊,于是新开一贴{:10_266:}

myd0311 发表于 2023-4-1 16:16:55

请问一共多少行,多少列,数据范围总得给出来呀

昭昭天命amg 发表于 2023-4-1 16:20:36

myd0311 发表于 2023-4-1 16:16
请问一共多少行,多少列,数据范围总得给出来呀

就是图里下面那个啊,上面那个是例子,是我图又没传全吗{:10_266:}

myd0311 发表于 2023-4-1 16:21:01

虽然这个回溯法是可行的,但是回溯法的时间复杂度是指数级别的,行列一旦多了就会超时,我有一个 广度优先搜索 的想法,每一个状态都记录每一行的剩余值,每一列的剩余值,以及当前坐标,那么对于示例就一共有 7 ** 7 * 49 = 40353607 以下的状态,应该是能过去的,但是一旦列行超过了 10 就不好整了,可能会涉及到 dp

myd0311 发表于 2023-4-1 16:24:03

昭昭天命amg 发表于 2023-4-1 16:20
就是图里下面那个啊,上面那个是例子,是我图又没传全吗

我懂了,这个回溯有可能会超时,为了节约时间,要不写个 广度优先搜索吧

C++ 可以么?

昭昭天命amg 发表于 2023-4-1 16:29:15

myd0311 发表于 2023-4-1 16:24
我懂了,这个回溯有可能会超时,为了节约时间,要不写个 广度优先搜索吧

C++ 可以么?

我没学过C++,只会java和python...

myd0311 发表于 2023-4-1 16:37:06

等等,我搞反了,上面的不对{:10_306:}

myd0311 发表于 2023-4-1 16:38:13

现在好了,nx ny 搞反了:

d = [, [-1, 0], , ]
l_rem = [-1, 1, 1, 3, 3, 4, 5, 6] # 列剩余
r_rem = [-1, 5, 3, 5, 1, 3, 2, 4] # 行剩余
vis = [ for i in range(8)]
vis = 1
l_rem -= 1
r_rem -= 1
def solve(x, y):
    if x == 7 and y == 7:
      ok = 1
      for i in range(1, 8):
            if l_rem != 0 or r_rem != 0:
                ok = 0
                break
      if ok == 1:
            for i in range(1, 8):
                for j in range(1, 8):
                  print(vis, end = " ")
                print()
            exit(0)
    for i in d:
      nx = x + i
      ny = y + i
      if nx >= 1 and nx <= 7 and ny >= 1 and ny <= 7 and vis == 0:
            if l_rem >= 0 and r_rem >= 0:
                l_rem -= 1
                r_rem -= 1
                vis = 1
                solve(nx, ny)
                l_rem += 1
                r_rem += 1
                vis = 0
solve(1, 1)

最后输出:
1 1 1 0 0 1 1
0 0 1 0 0 1 1
0 0 1 1 1 1 1
0 0 0 0 0 0 1
0 0 0 0 1 1 1
0 0 0 1 1 0 0
0 0 0 1 1 1 1
这样一来,具体怎么走也就很简单了

昭昭天命amg 发表于 2023-4-1 16:57:30

myd0311 发表于 2023-4-1 16:38
现在好了,nx ny 搞反了:

最后输出:


大佬啊!感谢!不过这种写法也是回溯吧

myd0311 发表于 2023-4-1 17:17:34

昭昭天命amg 发表于 2023-4-1 16:57
大佬啊!感谢!不过这种写法也是回溯吧

对呀,这是回溯,因为不能重复走嘛

如果有用,求给一个最佳答案,感谢{:10_254:}

bfs 也可以,只是十分麻烦
页: [1]
查看完整版本: 一个类似数独的迷宫问题(新开一贴)