c048688bfa
[SVN r62098]
132 lines
4.2 KiB
HTML
132 lines
4.2 KiB
HTML
<html><head><!-- Copyright 2007 Aaron Windsor
|
||
|
||
Distributed under the Boost Software License, Version 1.0.
|
||
(See accompanying file LICENSE_1_0.txt or copy at
|
||
http://www.boost.org/LICENSE_1_0.txt)
|
||
|
||
--><title>Boost Graph Library: Planar Canonical Ordering</title>
|
||
</head>
|
||
<body alink="#ff0000"
|
||
bgcolor="#ffffff"
|
||
link="#0000ee"
|
||
text="#000000"
|
||
vlink="#551a8b">
|
||
<img src="../../../boost.png" alt="C++ Boost" height="86" width="277">
|
||
|
||
<br clear="">
|
||
|
||
<h1>Planar Canonical Ordering</h1>
|
||
|
||
<pre>template <typename Graph, typename PlanarEmbedding, typename OutputIterator, typename VertexIndexMap>
|
||
void planar_canonical_ordering(const Graph& g, PlanarEmbedding embedding, OutputIterator ordering, VertexIndexMap vm);
|
||
</pre>
|
||
|
||
<p>
|
||
A <i>planar canonical ordering</i> is an ordering <i>v<sub>1</sub>,
|
||
v<sub>2</sub>, ..., v<sub>n</sub></i> of the vertices of a
|
||
<a href="make_maximal_planar.html">maximal</a>
|
||
<a href="planar_graphs.html">planar</a> graph having the property that, for
|
||
each <i>k</i>, <i>3 <= k < n</i>, the graph induced by
|
||
<i>v<sub>1</sub>, v<sub>2</sub>, ..., v<sub>k</sub></i>
|
||
</p><ul>
|
||
<li>is biconnected and contains the edge <i>{v<sub>1</sub>, v<sub>2</sub>}</i>
|
||
on its outer face.
|
||
</li><li>has any vertices in the range <i>v<sub>1</sub>, v<sub>2</sub>, ...,
|
||
v<sub>k</sub></i> that are adjacent to <i>v<sub>(k+1)</sub></i> on its outer
|
||
face, and these vertices form a path along the outer face.
|
||
</li></ul>
|
||
|
||
Let <i>G<sub>k</sub></i> be the graph induced by the first <i>k</i> vertices in
|
||
the canonical ordering, along with all edges between any of the first <i>k</i>
|
||
vertices. After <i>G<sub>k</sub></i> has been drawn, the <i>(k+1)</i>st vertex
|
||
can be drawn easily without edge crossings, since it's adjacent only to a
|
||
consecutive sequence of vertices on the outer face of <i>G<sub>k</sub></i>.
|
||
<p>
|
||
</p><blockquote>
|
||
<center>
|
||
<img src="./figs/canonical_ordering.png">
|
||
</center>
|
||
</blockquote>
|
||
|
||
A planar canonical ordering exists for every maximal planar graph with at
|
||
least 2 vertices. <tt>planar_canonical_ordering</tt> expects the input graph
|
||
to have at least 2 vertices.
|
||
<p>
|
||
|
||
The planar canonical ordering is used as an input in some planar graph drawing
|
||
algorithms, particularly those that create a straight line embedding.
|
||
de Fraysseix, Pach, and Pollack
|
||
[<a href="./bibliography.html#defraysseixpachpollack90">72</a>]
|
||
first proved the
|
||
existence of such an ordering and showed how to compute one in time
|
||
<i>O(n)</i> on a maximal planar graph with <i>n</i> vertices.
|
||
|
||
|
||
<h3>Complexity</h3>
|
||
If the vertex index map provides constant-time access to indices, this
|
||
function takes time <i>O(n + m)</i> for a planar graph with <i>n</i> vertices
|
||
and <i>m</i> edges. Note that
|
||
in a simple planar graph with <i>f</i> faces, <i>m</i> edges, and <i>n</i>
|
||
vertices, both <i>f</i> and <i>m</i> are <i>O(n)</i>.
|
||
|
||
<h3>Where Defined</h3>
|
||
|
||
<p>
|
||
<a href="../../../boost/graph/planar_canonical_ordering.hpp">
|
||
<tt>boost/graph/planar_canonical_ordering.hpp</tt></a>
|
||
|
||
</p><h3>Parameters</h3>
|
||
|
||
IN: <tt>Graph& g</tt>
|
||
|
||
<blockquote>
|
||
An undirected graph. The graph type must be a model of
|
||
<a href="VertexAndEdgeListGraph.html">VertexAndEdgeListGraph</a>.
|
||
The graph must:
|
||
<ul>
|
||
<li>Be maximal planar.</li>
|
||
<li>Have at least two vertices.</li>
|
||
</ul>
|
||
</blockquote>
|
||
|
||
IN: <tt>PlanarEmbedding</tt>
|
||
|
||
<blockquote>
|
||
A model of <a href="PlanarEmbedding.html">PlanarEmbedding</a>.
|
||
</blockquote>
|
||
|
||
IN: <tt>OutputIterator</tt>
|
||
|
||
<blockquote>
|
||
An OutputIterator with <tt>value_type</tt> equal to
|
||
<tt>graph_traits<Graph>::vertex_descriptor</tt>. The canonical ordering
|
||
will be written to this iterator.
|
||
</blockquote>
|
||
|
||
IN: <tt>VertexIndexMap vm</tt>
|
||
|
||
<blockquote>
|
||
A <a href="../../property_map/doc/ReadablePropertyMap.html">Readable Property Map
|
||
</a> that maps vertices from <tt>g</tt> to distinct integers in the range
|
||
<tt>[0, num_vertices(g) )</tt><br>
|
||
<b>Default</b>: <tt>get(vertex_index,g)</tt><br>
|
||
</blockquote>
|
||
|
||
<h3>Example</h3>
|
||
|
||
<p>
|
||
<a href="../example/canonical_ordering.cpp">
|
||
<tt>examples/canonical_ordering.cpp</tt></a>
|
||
|
||
</p><h3>See Also</h3>
|
||
|
||
<p>
|
||
<a href="planar_graphs.html">Planar Graphs in the Boost Graph Library</a>
|
||
|
||
<br>
|
||
</p><hr>
|
||
Copyright <20> 2007 Aaron Windsor (<a href="mailto:aaron.windsor@gmail.com">
|
||
aaron.windsor@gmail.com</a>)
|
||
|
||
</body></html>
|