Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最短路径问题的一种变体_Algorithm_Shortest Path - Fatal编程技术网

Algorithm 最短路径问题的一种变体

Algorithm 最短路径问题的一种变体,algorithm,shortest-path,Algorithm,Shortest Path,有人能帮我解决这个问题吗?我所能想到的就是递归调用一个函数(但这似乎不起作用) 假设我从零开始,在每一步加上两个数字中的任何一个。所以,首先我可以把n1或n2加到零上;因此,新编号变为n1或n2,然后添加n1或n2中的任何一个 这样做,我如何才能确定是否达到某个数字,比如N?如果达到了这个数字,我怎么才能找到它达到N的最短路径(解决方案可能类似于n1,n1,n2)?这看起来更像是一个具有非负性约束的问题,而不是一个最短路径问题 文章总结:如果d是n1和n2的最大公约数,那么只有当N是d的倍数时才

有人能帮我解决这个问题吗?我所能想到的就是递归调用一个函数(但这似乎不起作用)

假设我从零开始,在每一步加上两个数字中的任何一个。所以,首先我可以把n1或n2加到零上;因此,新编号变为n1或n2,然后添加n1或n2中的任何一个

这样做,我如何才能确定是否达到某个数字,比如N?如果达到了这个数字,我怎么才能找到它达到N的最短路径(解决方案可能类似于n1,n1,n2)?

这看起来更像是一个具有非负性约束的问题,而不是一个最短路径问题


文章总结:如果d是n1和n2的最大公约数,那么只有当N是d的倍数时才有解。如果是,则有无穷多个解(包括最小的解),可以通过。你只需要做一点(哈!)额外的工作来确定在非负整数中是否存在最小解。(例如,2n1+3n2=1没有非负解。)

排列数字,使n1>n2

从N(结果为M)重复子结构n2,直到M%n1=0和M>=0。这将给出最优解,N=(M/n1)*n1+rest*n2


如果您的算法在n1步后找不到M,则没有解。

“当且仅当N是d的倍数时才有解”-不正确。检查n1=3 n2=4 N=5。@yi_H,3和4的GCD为1。5是1的倍数。@svick:是的,没有x和y,因此3x+4y=5,因此x和y是非负整数。因此,这有点错误。这不是iff,而是相反的含义。@harold,Ted说id的方式没有错。他说如果条件成立,就会有解决方案。但也许它们不是非负的,你必须把它作为第二步来理解。@harold-也许你把第二段开头的“then thas a solution”解释为OP问题的解决方案。我不是这个意思;这是指(无约束)线性丢番图方程的任何解。我想很明显,当时我是在总结这篇文章。