Azzera filtri
Azzera filtri

Remove node and reconnect edges in graph

9 visualizzazioni (ultimi 30 giorni)
IrisL
IrisL il 19 Lug 2022
Commentato: IrisL il 21 Lug 2022
I have a node in a graph that acts as a sort of 'temporary connector' node. I'd like to remove that node and update the edges in the graph so that all of its immediate predecessors point to its immediate successors.
Example: I have a graph 1 > 2 > 3. I'd like to remove node 2 and end up with the graph 1 > 3.
I read several posts on removing nodes, but couldn't find a way to do what I want.

Risposta accettata

Chunru
Chunru il 20 Lug 2022
s = [1 1 1 1 2 2 3 3 3 5 5];
t = [2 3 4 6 1 5 4 5 6 4 6];
names = string(1:6);
G = digraph(s, t, [], names);
h1 = plot(G);
% Remove node and add the eages
% node 1
G1 = G;
pre = predecessors(G1, 1);
suc = successors(G1, 1);
for i=1:length(pre)
for j=1:length(suc)
G1=addedge(G1, pre(i), suc(j));
end
end
G1 = rmnode(G1, 1); % remove the node 1 also remover the edges to 1
%G.Edges, G1.Edges
figure
h2 = plot(G1);
h2.XData = h1.XData(2:end);
h2.YData = h1.YData(2:end);
  7 Commenti
Chunru
Chunru il 21 Lug 2022
unique(G.Edges) should work for an Edge Table G.Edges
IrisL
IrisL il 21 Lug 2022
I used unique(G.Edges.EndNodes) which returns a seperate cell with unique edges. However, this code does not remove duplicate edges from the graph. The number of the edges will not change and G.Edges remains the same.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Graph and Network Algorithms in Help Center e File Exchange

Prodotti


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by