Python算法问题|如何在连通图中找到期望权重的路径?

问题描述

问题

假设你有一个像这样的 m * n 矩阵:

Grid = 4 * 4

1 1 1 1    
2 2 2 2    
3 3 3 3    
4 4 4 4

你想从左上角连接到右下角,你只能向右或向下。此外,您还想找到获得所需总和所需的操作。

例如:

enter image description here

在教科书中找到的脚本,不清楚

def move(m,n,sum):
  count = m + n - 1
  max_val = m
  s = sum
  r = []
  while max_val > 0:
    if count <= 0:
      return False,r
    least = max_val * ((max_val - 1) / 2)
    r.append(max_val)
    s -= max_val
    count -= 1
    while ((count > 0) and (s > least + (count - (max_val - 1)) * (max_val - 1))):
      r.append(max_val)
      s -= max_val
      count -= 1
    if s < least:
      return False,r
    max_val -= 1
  return True,r


def combine(m,sum):
  result,new_res = move(m,sum)
  new_res.reverse()
  for i in range(1,len(new_res)):
    if new_res[i] == new_res[i - 1]:
      print("R")
    else:
      print("D")

combine(4,4,16)

我不太明白解决方案。

有人能解释一下算法吗?

特别是在函数 move 中,它在 while 循环中执行此检查:

while ((count > 0) and (s > least + (count - (max_val - 1)) * (max_val - 1))):

问题

  1. 这个算法的名称是什么?
  2. 这个脚本是如何工作的?
  3. 运行时间(时间复杂度)是多少?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)