_ugraph.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  _ugraph.c
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #include <LEDA/ugraph.h>
  12. //------------------------------------------------------------------------------
  13. // undirected graphs 
  14. //------------------------------------------------------------------------------
  15. // ugraph subgraph constructors:
  16. ugraph::ugraph(ugraph& G, const list<node>& nl, const list<edge>& el)
  17. { // construct subugraph (nl,el) of ugraph G
  18.   parent = &G;
  19.   node v,w;
  20.   edge e;
  21.   node* N = new node[G.max_n_index+1];
  22.   forall(v,nl)
  23.    { if (graph_of(v) != parent) 
  24.       error_handler(1,"ugraph: illegal node in subgraph constructor");
  25.      N[v->name] = new_node(v);
  26.     }
  27.   forall(e,el)
  28.    { v = source(e);
  29.      w = target(e);
  30.      if ( graph_of(e)!= parent || N[v->name]==0 || N[w->name]==0 ) 
  31.       error_handler(1,"ugraph: illegal edge in subgraph constructor");
  32.      new_edge(N[v->name],N[w->name],e);
  33.     }
  34.   delete N;
  35.  }
  36. ugraph::ugraph(ugraph& G, const list<edge>& el)
  37. { // construct subgraph of ugraph G with edgelist el 
  38.   node  v,w;
  39.   edge  e;
  40.   node* N = new node[G.max_n_index+1];
  41.   forall_nodes(v,G) N[v->name] = 0;
  42.   parent = &G;
  43.   forall(e,el)
  44.    { v = source(e);
  45.      w = target(e);
  46.      if (N[v->name] == 0) N[v->name] = new_node(v);
  47.      if (N[w->name] == 0) N[w->name] = new_node(w);
  48.      if ( graph_of(e) != parent )
  49.        error_handler(1,"ugraph: illegal edge in subgraph constructor");
  50.      new_edge(N[v->name],N[w->name],e);
  51.     }
  52.   delete N;
  53.  }