complete graphs
authormarci
Mon, 10 May 2004 16:32:21 +0000
changeset 5981faa5bec1717
parent 597 a6e2b02f496a
child 599 26d6c7b5c367
complete graphs
src/work/jacint/graph_gen.h
     1.1 --- a/src/work/jacint/graph_gen.h	Mon May 10 16:31:48 2004 +0000
     1.2 +++ b/src/work/jacint/graph_gen.h	Mon May 10 16:32:21 2004 +0000
     1.3 @@ -62,7 +62,7 @@
     1.4    }
     1.5  
     1.6    /// Generates a complete graph in the undirected sense 
     1.7 -  /// with n nodes and m edges.
     1.8 +  /// with n nodes.
     1.9    /// Before generating the random graph, \c g.clear() is called.
    1.10    template<typename Graph>
    1.11    void completeGraph(Graph& g, int n) {
    1.12 @@ -74,5 +74,39 @@
    1.13        for (int j=i+1; j<n; ++j)
    1.14  	g.addEdge(nodes[i], nodes[j]);
    1.15    }
    1.16 +
    1.17 +  /// Generates a complete bidirected graph on n nodes.
    1.18 +  /// Before generating the random graph, \c g.clear() is called.
    1.19 +  template<typename Graph>
    1.20 +  void completeBidirectedGraph(Graph& g, int n) {
    1.21 +    g.clear();
    1.22 +    std::vector<typename Graph::Node> nodes;
    1.23 +    for (int i=0; i<n; ++i)
    1.24 +      nodes.push_back(g.addNode());
    1.25 +    for (int i=0; i<n; ++i) 
    1.26 +      for (int j=i+1; j<n; ++j) {
    1.27 +	g.addEdge(nodes[i], nodes[j]);	
    1.28 +	g.addEdge(nodes[j], nodes[i]);
    1.29 +      }
    1.30 +  }
    1.31 +
    1.32 +  /// Generates a complete bipartite graph with a and b nodes 
    1.33 +  /// in the color classes.
    1.34 +  /// Before generating the random graph, \c g.clear() is called.
    1.35 +  template<typename Graph>
    1.36 +  void completeBipartiteGraph(Graph& g, int a, int b) {
    1.37 +    g.clear();
    1.38 +    std::vector<typename Graph::Node> s_nodes;
    1.39 +    std::vector<typename Graph::Node> t_nodes;
    1.40 +    for (int i=0; i<a; ++i)
    1.41 +      ///\bug g.addNode(g.S_CLASS) would be better.
    1.42 +      s_nodes.push_back(g.addNode(false));
    1.43 +    for (int i=0; i<b; ++i)
    1.44 +      ///\bug g.addNode(g.T_CLASS) would be better.
    1.45 +      t_nodes.push_back(g.addNode(true));
    1.46 +    for (int i=0; i<a; ++i) 
    1.47 +      for (int j=0; j<b; ++j)       
    1.48 +	g.addEdge(s_nodes[i], t_nodes[j]);
    1.49 +  }
    1.50    
    1.51  } //namespace hugo