Changed license from GPL v2+ to FreeBSD (aka BSD 2-clause) license
[libdai.git] / include / dai / weightedgraph.h
index af6384b..edb1422 100644 (file)
@@ -1,17 +1,14 @@
 /*  This file is part of libDAI - http://www.libdai.org/
  *
- *  libDAI is licensed under the terms of the GNU General Public License version
- *  2, or (at your option) any later version. libDAI is distributed without any
- *  warranty. See the file COPYING for more details.
+ *  Copyright (c) 2006-2011, The libDAI authors. All rights reserved.
  *
- *  Copyright (C) 2006-2010  Joris Mooij  [joris dot mooij at libdai dot org]
- *  Copyright (C) 2006-2007  Radboud University Nijmegen, The Netherlands
+ *  Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
  */
 
 
 /** \file
  *  \brief Defines some utility functions for (weighted) undirected graphs, trees and rooted trees.
- *  \todo Improve general support for graphs and trees.
+ *  \todo Improve general support for graphs and trees (in particular, a good tree implementation is needed).
  */
 
 
@@ -27,6 +24,7 @@
 #include <climits>   // Work-around for bug in boost graph library
 #include <dai/util.h>
 #include <dai/exceptions.h>
+#include <dai/graph.h>
 
 #include <boost/graph/adjacency_list.hpp>
 #include <boost/graph/prim_minimum_spanning_tree.hpp>
@@ -121,6 +119,14 @@ class GraphEL : public std::set<UEdge> {
         GraphEL( InputIterator begin, InputIterator end ) {
             insert( begin, end );
         }
+
+        /// Construct from GraphAL
+        GraphEL( const GraphAL& G ) {
+            for( size_t n1 = 0; n1 < G.nrNodes(); n1++ )
+                foreach( const Neighbor n2, G.nb(n1) )
+                    if( n1 < n2 )
+                        insert( UEdge( n1, n2 ) );
+        }
 };
 
 
@@ -146,7 +152,8 @@ class RootedTree : public std::vector<DEdge> {
 
 
 /// Constructs a minimum spanning tree from the (non-negatively) weighted graph \a G.
-/** \param usePrim If true, use Prim's algorithm (complexity O(E log(V))), otherwise, use Kruskal's algorithm (complexity O(E log(E)))
+/** \param G Weighted graph that should have non-negative weights.
+ *  \param usePrim If true, use Prim's algorithm (complexity O(E log(V))), otherwise, use Kruskal's algorithm (complexity O(E log(E))).
  *  \note Uses implementation from Boost Graph Library.
  *  \note The vertices of \a G must be in the range [0,N) where N is the number of vertices of \a G.
  */
@@ -210,7 +217,8 @@ template<typename T> RootedTree MinSpanningTree( const WeightedGraph<T> &G, bool
 
 
 /// Constructs a minimum spanning tree from the (non-negatively) weighted graph \a G.
-/** \param usePrim If true, use Prim's algorithm (complexity O(E log(V))), otherwise, use Kruskal's algorithm (complexity O(E log(E)))
+/** \param G Weighted graph that should have non-negative weights.
+ *  \param usePrim If true, use Prim's algorithm (complexity O(E log(V))), otherwise, use Kruskal's algorithm (complexity O(E log(E))).
  *  \note Uses implementation from Boost Graph Library.
  *  \note The vertices of \a G must be in the range [0,N) where N is the number of vertices of \a G.
  */