Here is a very simplified example of my Dot graph:
strict digraph graphName {
A->B
B->A
}
This creates

Instead I want a single edge shown between A and B but with a double arrow head. I know how to get the double arrowhead as a global option:
strict digraph graphName {
edge [dir="both"]
A->B
B->A
}
But that looks very ugly, and not all of my edges should be dual headed.

If I do more processing of the graph and detect the double reference myself and replace the two edges with a single edge, it looks OK. But I'd rather not have to do this extra step
strict digraph graphName {
A->B [dir="both"]
}

Any better solutions?
How about 'concentrate=true'?:
strict digraph graphName {
concentrate=true
A->B
B->A
}

From the documentation:
If true, use edge concentrators. This merges multiedges into a single edge and causes partially parallel edges to share part of their paths. The latter feature is not yet available outside of dot.
You should just use:
A -> B [dir="both"]
来源:https://stackoverflow.com/questions/3462433/dot-graph-language-how-to-make-bidirectional-edges