Finding the shortest path in a cell array based on given input
1 次查看(过去 30 天)
显示 更早的评论
If I have a call array of n - 1x2 vectors, how do I find the shortest path using a combination of these n vectors based on a given input
example using 6 vectors:
existing cell array - { [0 1], [1 2], [2 3], [3 4], [0 3], [1 4] }
input - [0 4]
expected output - {[0 1], [1 4]} or {[0 3],[3 4]}
edit: fixed input
2 个评论
Adam Danz
2019-11-22
What do you mean "shortest path"?
Are the pairs of valure (x,y) coordinates such that you have 6 dots and you're trying to find which dot is closest to the input coordinate?
I don't understand how the outputs map onto the input.
采纳的回答
Stephen23
2019-11-22
编辑:Stephen23
2019-11-23
Each row of the output cell array is one path:
>> C = {[0,1],[1,2],[2,3],[3,4],[0,3],[1,4]};
>> V = [0,4];
>> Z = mainfun(C,V)
>> Z{1,:} % 1st path
ans =
0 1
ans =
1 4
>> Z{2,:} % 2nd path
ans =
0 3
ans =
3 4
Where mainfun is defined as:
function Z = mainfun(C,V)
%C = {[0,1],[1,2],[2,3],[3,4],[0,3],[1,4]};
%V = [0,4];
N = 1+numel(C);
Z = {};
M = vertcat(C{:});
X = V(1)==M(:,1);
for ii = reshape(find(X),1,[])
nestfun(M(~X,:),C(ii))
end
%
function nestfun(W,A)
if numel(A)>N
return
elseif V(2)==A{end}(2)
if numel(A)<N
N = numel(A);
Z = A;
else
Z(end+1,:) = A;
end
else
Y = W(:,1)==A{end}(2);
for jj = reshape(find(Y),1,[])
nestfun(W(~Y,:),[A,{W(jj,:)}])
end
end
end
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!