我正在研究路径规划器算法。我有一个Nx2矩阵 NodeInfo ,它的第一列中有当前节点号,第二列中有父节点号。例如:
NodeInfo = [3,1;
4,1;
5,2;
6,2;
7,3;
8,4;
9,4;
10,4;
11,5;
12,6;
13,6;
14,6;
15,7;
16,7;
17,8;
18,8;
19,9;
20,9;
21,10;
22,10;
23,11;
24,11;
25,12;
26,12];
当算法达到目标时,它输出节点号,在这种情况下为26。我正在寻找一种智能方法来跟踪父节点并创建由目标节点产生的节点数组。所以输出应该是:
Array = [26, 12, 6, 2];
谢谢!
答案 0 :(得分:1)
p = NodeInfo(end,1);
parents = [p]
while (~isempty(p))
p = NodeInfo(find(NodeInfo(:,1)==p),2)
parents = [parents p]
end
答案存储在parents
答案 1 :(得分:0)
下面的代码使用container,并且可能需要一些时间来构建散列映射,但是当实际存在具有大量请求的较大数据集时,它可能比std
更快。
修改:在find()
中添加了2个节点,以防止NodeMap
函数进入状态,同时避免浪费太多时间。
isKey()
NodeMap = containers.Map(NodeInfo(:,1),NodeInfo(:,2)); %Create a container
NodeMap(1)=0; NodeMap(2)=0; %Add 2 nodes
nodes=zeros(1,length(NodeMap)); %pre-allocate
k=2; [N,nodes(1)]=deal(26); %Init parameters
while(N>0)
[nodes(k),N]=deal(NodeMap(N));
k=k+1;
end
nodes(nodes == 0)=[] %Cleaning up & print
的输出是:
N=26
希望它有所帮助!