while any(current == inds)
时间: 2023-10-09 10:12:13 浏览: 55
在 MATLAB 中,`any` 函数可以判断一个数组中是否存在任意一个非零元素。
在上面的代码中,`inds` 是一个数组,存储了所有有前驱节点的节点的索引。`current` 是当前节点的索引。
这行代码的作用是判断当前节点是否在 `inds` 数组中,如果在,则说明当前节点是最短路径上的一个节点,需要将它存储在 `p` 数组中;如果不在,则继续遍历当前节点的前驱节点。
具体实现过程可以参考以下代码:
```matlab
function p = get_path(cameFrom, current)
inds = find_nonempty(cameFrom);
p = nan(1, length(inds));
i = length(inds);
while isKey(cameFrom, current)
if any(current == inds)
p(i) = current;
i = i - 1;
end
current = cameFrom(current);
end
p(1) = current;
end
```
该函数会首先调用 `find_nonempty` 函数获取非空元素的索引,然后利用 `nan` 函数创建一个初始值为 NaN 的数组 `p`,用于存储最短路径上的节点。
接着,从终点开始倒序遍历每个节点的前驱节点,判断当前节点是否在 `inds` 数组中,如果在,则说明当前节点是最短路径上的一个节点,需要将它存储在 `p` 数组中;如果不在,则继续遍历当前节点的前驱节点。
在存储节点时,需要注意数组 `p` 的索引与字典 `cameFrom` 中节点的索引是反向的,因此需要从数组末尾开始存储节点。最后,需要将起点存储在 `p` 数组的第一个元素中,表示起点是最短路径上的第一个节点。
阅读全文