matlab - matlab - 从邻接中查找路径数组的循环太多
问题描述
就像标题所说的那样,我想让代码更快更容易阅读。
我有一个邻接矩阵:
Ad=[ 0 1 0 0 1 0 0 0 0 0;
1 0 0 0 0 0 0 0 0 0;
1 0 0 1 1 0 0 0 0 0;
0 0 1 0 0 1 0 0 0 0;
1 0 1 0 0 1 0 0 0 0;
0 0 0 1 1 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0;
0 0 0 0 0 0 1 0 0 1;
0 0 0 0 0 0 1 0 0 1;
0 0 0 0 0 0 0 1 1 0];
我将用Name={'a';'b';'c';'d';'E';'F';'a';'E';'d';'F'};
它来描述一种“行星”。
从已删除问题的过去评论中找出一些新词后,我可以想出一个开始:
dig=digraph(Ad, Name);
[Num.Nodes,Num.Null]=size(dig.Nodes);
for j2=1:Num.Nodes
dfs{j2}=dfsearch(dig,(j2),'allevents');
Num.node2path=dfs{j2}.Node;
Num.tokeep = ~isnan(Num.node2path);
Num.node2path = Num.node2path(Num.tokeep);
Num.node2path(1)=[];
[Num.node2path2,Num.Null]=size(Num.node2path);
for i2=1:Num.node2path2-1
if Num.node2path(i2)==Num.node2path(i2+1)
path{j2,i2}=Num.node2path(1:i2);Num.node2path(i2)=1000;Num.node2path(i2+1)=1001;
if Num.node2path(i2-1)==Num.node2path(i2+2)
Num.node2path(i2-1)=1002;Num.node2path(i2+2)=1003;
end
end
end
end
path = path(~cellfun('isempty',path));
[Num.clear1000,Num.degeaba] = size(path);
for i3=1:Num.clear1000
Num.is1000 = find(path{i3}(:) == 1000);
path{i3}(Num.is1000)=[];
Num.is1000 = find(path{i3}(:) == 1001);
path{i3}(Num.is1000)=[];
Num.is1000 = find(path{i3}(:) == 1002);
path{i3}(Num.is1000)=[];
Num.is1000 = find(path{i3}(:) == 1003);
path{i3}(Num.is1000)=[];
end
问题是我觉得循环太多太复杂了,我什至没有得到我想要的结果。例如,'2' 和 '6' 之间的路径将是[2;1;5;3;4;6]
并且可以通过更多的循环来寻找path{i4}(1);
等于 2 和path{i4}(end);
等于 6,i4 是 10。
因此,在找到所有路径后,我想使用 重命名路径Name
,因为我将相同的名称分配给相同类型的“行星”。接下来我会选择通往“最佳星球”的最短路径。
现在形式为[a;E;d]
的路径与Ad2
和的路径进行比较Name2
。如果从第一个“行星”到最后一个“行星”的距离相似,则将保存并比较具有相同名称的路径,就像开始搜索的路径一样。我引用“行星”是因为它们可能是恒星、小行星,甚至这些都是分类的,所以这就是Name
它的来源。
解决方案
推荐阅读
- c# - 如何从 C# 调用 mono_threads_request_thread_dump()?
- java - 将 .equals() 替换为 Objects.equals()
- php - 当属性不存在时,为什么 Twig 会退回到对象?
- angular - ngx-bootstrap 与 bootstrap3 设置工具提示宽度
- maven - 在 Maven 构建时向 Spring Boot application.yml 文件添加属性
- java - 新鲜到java(数组和素数)需要帮助解决问题
- php - phpword中具有动态行数的表
- python - 如何在文件中搜索特定的 from 和 to 关键字并在 python 中打印句子
- sql - 如何根据 SQL Server 中另一列中的值获取行?
- java - 在 Keystore 中添加证书后是否需要重新启动 JVM?