【问题标题】:How to add new nodes in between two existing nodes如何在两个现有节点之间添加新节点
【发布时间】:2018-11-23 07:15:31
【问题描述】:

我在 MATLAB 中创建了以下 Graph

function dummyGraph()
tail = [1 2 3 4 5 6 6 7 8 9 10 10 12 13 14 15];
head = [2 3 4 5 6 7 12 8 9 10 15 11 13 14 15 16];
Graph = graph(tail,head)
plot(Graph)
NodeNumber = 1:16
Neighbor={};
for NodeIdx =NodeNumber
    Neighbor{NodeIdx} = neighbors(Graph,NodeIdx);
end
end

我想在两个连续节点之间添加节点。

我正在尝试以下方法

1.获取Graph中存在的所有节点的邻居节点。 2. 在两个连续的邻居之间添加四个新节点。

我可以在代码中实现第一步。我找不到用于在现有节点之间添加节点的 MATLAB 命令。 MATLAB 文档中给出了命令addnode(G,nodeIDs)。但是,我不确定如何使用这个命令来实现我的案例。

我想请教一下如何进行的建议

【问题讨论】:

  • 我想澄清在两个连续邻居之间添加四个新节点的含义。是不是说,比如在节点1和2之间添加节点17、18、19、20,在节点2和3之间添加节点21、22、23、24等等?
  • @BanghuaZhao 你说的很对。我想以同样的方式进行。我对在 MATLAB 中执行此任务并不特别感兴趣。有没有其他平台(python?)可以实现这一点?
  • 我明白了。不连续但连接的节点号怎么办?比如节点 6 和 12,它们是连通的,但编号不连续。
  • @BanghuaZhao 我也想在 6 到 12 之间添加 4 个新节点。

标签: matlab graph nodes


【解决方案1】:

这里是解决方案,

function AddNodes()
tail = [1 2];
head = [2 3];
Graph = graph(tail,head)
NVertex = size(Graph.Nodes);
NVertex = NVertex(1);

%% Name Nodes

NNode = string(1:NVertex)';
Graph.Nodes.Name = cellstr(NNode);


%% Adding nodes
GraphEdges = table2cell(Graph.Edges(:,1));
NEdges = size(GraphEdges);
NEdges = NEdges(1);
Source=[];
Sink =[];
for edge = 1:NEdges
    Graph  = addnode(Graph,4);
    source = GraphEdges{edge}(1);
    sink = GraphEdges{edge}(2);
    Graph  = rmedge(Graph,source,sink); 
    Add4Musk = Graph.Nodes.Name(end-3:end);
    TobeAdded  = vertcat(source,Add4Musk,sink);
    for node = 1:length(TobeAdded)-1
        source = TobeAdded(node);
        sink = TobeAdded(node+1);
        Graph = addedge(Graph,source,sink);
    end 
end

%% Plot graph
plot(Graph,'Layout','subspace3')

我很高兴知道是否有其他方法可以完成这项任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多