# How do I create a graph with randomly directed edges starting from a undirected graph?

I have an undirected graph $G$. How would I randomly assign directions to some fraction $p$ of the edges? How might I do this efficiently / quickly provided I have a large graph structure?

For example, to assign a graph random edge weights, I might write:

GraphWithRandomWeights = Graph[EdgeList[G], EdgeWeight -> Table[RandomReal[{-1, 1}], {abc, 1, Length[EdgeList[G]]}]];


There is a built-in function DirectedGraph[ (*your undirected graph*) , "Random"] for this job:

myGraph = RandomGraph[{10, 13},
VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
ImagePadding -> 20, VertexSize -> Medium] DirectedGraph[myGraph, "Random"] (Note the layout may not be the same as myGraph.)

# Edit:

As OP asked in a comment, if you only want a fraction of the total edges to be directed, then the best way might be to manipulate the adjacency matrix:

myAdj = AdjacencyMatrix[myGraph] Suppose the edges we want to become directed are those between vertices $2\sim 4$, $1\sim 9$, $1\sim 10$, $5\sim 7$:

directEdgeSet = {{2, 4}, {1, 9}, {1, 10}, {5, 7}};


So a randomly constructed directed adjacency matrix would be:

myDirectAdj = ReplacePart[myAdj,
] The corresponding graph is

AdjacencyGraph[myDirectAdj,
DirectedEdges -> True,
VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
ImagePadding -> 20, VertexSize -> Medium] • @Sylvia is it possible for me to only direct a fraction of the total edges? – Peter Apr 21 '13 at 19:10
• @Peter Directed edges and undirected edges can not coexist in a same graph by definition. Please compare the difference of AdjacencyGraph[{{0, 1}, {1, 0}}, DirectedEdges -> True] and AdjacencyGraph[{{0, 1}, {1, 0}}]. – Silvia Apr 21 '13 at 19:32
• Got it, thanks! – Peter Apr 21 '13 at 19:45
• @Peter You're welcome. – Silvia Apr 21 '13 at 19:53