Как добавить новые узлы между двумя существующими узлами - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующее Graph, созданное в MATLAB

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 для добавления узлов между существующими узлами.Команда addnode(G,nodeIDs) приведена в документации MATLAB.Но я не уверен, как использовать эту команду для реализации в моем случае.

Я хотел бы попросить совета о том, как действовать

1 Ответ

0 голосов
/ 25 ноября 2018

Вот решение,

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')

Я был бы рад узнать, есть ли альтернативные способы выполнения этой задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...