       • To: mathgroup at smc.vnet.net
• Subject: [mg104192] FromAdjacencyMatrix / FromAdjacencyLists - broken? Workaround?
• From: Andrew <dr.a.graham at googlemail.com>
• Date: Thu, 22 Oct 2009 22:33:38 -0400 (EDT)

```Hello group,

This question seems to have been touched on in the past but I'm not
sure if it has ever been definitively answered. I would be grateful

I have some data that I would like to explore. It concerns a set of
directed graphs, without edge weights. The data comes to me as the
corresponding asymmetric adjacency matrices.

I can visualise the graphs directly using the native function
GraphPlot.
However, I would prefer to visualise them using ShowGraph from the
Combinatorica package - but this requires that the adjacency matrix is
converted to the Combinatorica graph format first.

The trouble is that (for directed graphs at least),
FromAdjacencyMatrix appears to be broken.

Example:
g = Cycle[3, Type -> Directed] (*construct a simple directed graph in
Combinatorica graph format*)

Edges[g] (*List of edges*)

Vertices[g] (*List of vertices*)

GraphOptions[g] (*Shows the graph options*)

ShowGraph[g, VertexNumber -> True] /.
x : Arrow[__] -> {Arrowheads[{{Automatic, 0.6}}], x} (*Visualises the
graph with ShowGraph, using a workaround to place the arrowheads mid-
edge, as suggested Apr 2 2008 by dh*)
GraphPlot[g, VertexLabeling -> True, DirectedEdges -> True]
(*Visualises the graph with GraphPlot - the same outcome*)

mg = ToAdjacencyMatrix[g, Type -> Directed] (*Convert to adjacency
matrix*)

mg // TableForm (*Inspect - seems appropriate*)

mg // MatrixForm (*Ditto*)

GraphPlot[mg, VertexLabeling -> True, DirectedEdges -> True] (*Cannot
plot directly with ShowGraph, but with GraphPlot the graph is still
preserved at this stage*)

g2 = FromAdjacencyMatrix[mg, Type -> Directed] (*Convert back to a
graph*)

Edges[g2] (*Oh dear. The direction of edge #3 has been reversed*)

Vertices[g2] (*Vertices are preserved*)

GraphOptions[g2] (*Graph options are preserved*)

ShowGraph[g2, VertexNumber -> True] /.
x : Arrow[__] -> {Arrowheads[{{Automatic, 0.6}}], x}
GraphPlot[g2, VertexLabeling -> True, DirectedEdges -> True] (*And
visualising the graph with both ShowGraph & GraphPlot it is no longer
the same as the graph we started out with*)

The problem seems to be with FromAdjacencyMatrix
FromAdjacencyLists shows the same problem

Is there something wrong with the code above, or are these functions
truly broken? If they are broken, can anyone help with writing a
function that will correctly turn a directed adjacency matrix into
Combinatorica lists of edges & vertices?

Finally, if these functions are broken, can they be fixed? I have
otherwise found Combinatorica very easy to work with & would prefer to
stick with it rather than native functions if possible. The
Combinatorica book has recently been republished in paperback & I have
found it very helpful.

Many thanks

Andrew Graham
Dept of Neurology