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

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/graph_alg.h>
  3. #include <LEDA/window.h>
  4. #include <LEDA/graph_edit.h>
  5. main()
  6. {
  7.   window W;
  8.   panel P;
  9.   GRAPH<point,int> G;
  10.   node v,w;
  11.   edge e;
  12.   int  N = 40;
  13.   int  node_width   = 12;
  14.   int  edge_width   =  1;
  15.   bool random_input = true;
  16.   P.bool_item("random input",random_input);
  17.   P.int_item("# segments",N);
  18.   P.int_item("node width",node_width,1,15);
  19.   P.int_item("edge width",edge_width,1,8);
  20.   for(;;)
  21.   {
  22.     P.open();
  23.     W.set_node_width(node_width);
  24.     W.set_line_width(edge_width);
  25.     G.clear();
  26.     if (random_input)
  27.      { W.set_node_width(3);
  28.        random_planar_graph(G,N);
  29.       }
  30.     else
  31.        graph_edit(W,G,false);
  32.   
  33.     W.del_messages();
  34.     W.message(string("PLANARITY TEST  N = %d",G.number_of_nodes()));
  35.   
  36.     if ( ! PLANAR(G,true) )
  37.     { W.acknowledge("Graph is not planar");
  38.       continue;
  39.      }
  40.   
  41.   
  42.      node_array<int> x(G),y(G);
  43.   
  44.   
  45.      W.del_messages();
  46.      W.message("STRAIGHT LINE EMBEDDING");
  47.   
  48.      STRAIGHT_LINE_EMBEDDING(G,x,y);
  49.      
  50.      int xmax=0;
  51.   
  52.      forall_nodes(w,G)  
  53.        if (x[w]>xmax) xmax= x[w];
  54.      
  55.      
  56.      W.init(-5,xmax+5,-5);
  57.   
  58.      forall_nodes(v,G) W.draw_node(x[v],2*y[v]);
  59.      forall_edges(e,G)  
  60.      { v = source(e);
  61.        w = target(e);
  62.        W.draw_edge(point(x[v],2*y[v]),point(x[w],2*y[w]),red);
  63.       }
  64.      
  65.       W.read_mouse();
  66.     }
  67.      
  68.   return 0;
  69.  }