【问题标题】:Storing values in a Matrix during recursion in Matlab在 Matlab 中递归期间将值存储在矩阵中
【发布时间】:2015-02-26 00:49:53
【问题描述】:

我目前正在用 Matlab 编写最短路径算法。我已经写了它,以便我可以计算它的总成本。相反,我想做的是生成一个矩阵,以便我可以将每个元素的值存储在最短路径中的当前成本。每当我尝试更改我的值时,我都会不断收到错误消息,指出矩阵超出范围或未定义所有输出变量。这是我的工作代码。如何更改它,以便我可以生成一个矩阵,该矩阵将当前成本沿最短路径中的所有元素存储。

以下代码传入成本矩阵和维度的参数并返回总成本。 minimumVal 是我编写的一个函数,它从它的三个参数中返回最小值。

function output = min_path(cost, m, n)

if ((m < 1) || (n < 1))
    output = 9*10000;

elseif ( m == 1)
    output = cost(m,n);

else
    output = cost(m,n) + minimumVal( min_path(cost, m-1, n-1), min_path(cost, m-1, n), min_path(cost, m, n-1) );

end


end % end min_path

【问题讨论】:

  • minimumVal 是做什么的?为什么不直接使用min
  • @DaveKielpinski 简单,试试min(1,3,2)。否则,对于 OP,“存储值”可以以不同的方式完成。我想知道的是:你想如何存储它们。你的意思是你尝试做一个矩阵output 来存储值?在这种情况下,我认为您需要将其与其他输入一起传递并在第一个函数调用之前预定义它(我的意思是在函数之外)。但是,其他可以做的是将值存储在节点树中。这不会给你很多空元素。可以使用嵌套单元格。
  • @patrik 是的,我知道。但是min([1,3,2]) 也可以达到最小值。我想知道minimumVal 函数是否在做一些显而易见的事情。

标签: matlab recursion shortest-path


【解决方案1】:

你可以试试这个。

function output = min_path(cost, m, n, output)

if ((m < 1) || (n < 1))
    output = 9*10000; % Do something here. This well crash

elseif ( m == 1)
    output(m,n) = cost(m,n);

else
    output = cost(m,n) + minimumVal( min_path(cost, m-1, n-1, output),...
               min_path(cost, m-1, n, output), min_path(cost, m, n-1, output) );

end

end % end min_path

它没有经过测试,但它应该可以工作。您需要分配一个足够大的数组以用作主要输入。此外,m=0, n=0 的情况也会崩溃。由于我不确定您希望这是如何实现的,因此我无法提出不会破坏您的其他代码的解决方案。

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多