How to convert graph to digraph?
18 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Felipe Schuback
am 4 Aug. 2017
Kommentiert: Walter Roberson
am 9 Nov. 2023
Hi all -
I plotted an graph and want to make some specific edges to be directed (digraph). Just to be a bit clearer: I have a full plotted and formatted minimum spanning tree from a graph which is not directed. I want to loop through the edges and, if a certain condition is met, replace the edge for a directed edge, pointing from node A to node B.
Is this possible? My graph would have both directed and undirected edges.
Best.
0 Kommentare
Akzeptierte Antwort
Christine Tobler
am 4 Aug. 2017
I'm afraid it's not possible to have both directed and undirected edges in the same graph. To convert a graph to a digraph, you could use
gDirected = digraph(adjacency(gUndirected));
This will replace every undirected edge with two directed edges going in opposing directions. You could then use rmedge to remove the edges that go in the direction you don't want.
Within most graph algorithms, these two edges will behave the same way as the undirected edge did - but of course, the plot will look very different.
5 Kommentare
Reihaneh Jahedan
am 8 Nov. 2023
If our graph is weighted and has different weight in different edges, how can we preserve these weights while converting to directed graph?
Walter Roberson
am 9 Nov. 2023
In the following code, I replace self-loops by a single undirectional edge from the node to itself, with weight the same as the graph weight. There are some cases in which people might feel that instead a self-loop should be replaced with two unidirectional loops from the node to itself, each with the weight of the original self-loop... but that is not what I implemented.
G = graph([0.0 0.1 0.2 0.3
0.1 0.0 0.4 0.5
0.2 0.4 10.0 0.6
0.3 0.5 0.6 0.0
])
HEdges1 = G.Edges;
HEdges2 = table(fliplr(HEdges1.EndNodes), HEdges1.Weight, 'VariableNames', {'EndNodes', 'Weight'});
HEdges = unique([HEdges1; HEdges2], 'rows');
H = digraph(HEdges);
plot(G,'EdgeLabel',G.Edges.Weight)
plot(H,'EdgeLabel',H.Edges.Weight)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Graph and Network Algorithms finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!