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

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/window.h>
  3. #include <LEDA/integer.h>
  4. #include <LEDA/rat_point.h>
  5. #include <LEDA/rat_segment.h>
  6. #include <LEDA/point.h>
  7. #include <LEDA/segment.h>
  8. extern void sweep0(list<rat_segment>&,GRAPH<rat_point,rat_segment>&,bool=true);
  9. extern void sweep(const list<rat_segment>&,GRAPH<rat_point,rat_segment>&);
  10. extern void sweep(const list<segment>&,GRAPH<point,segment>&);
  11. extern int cmp_points_count;
  12. extern int exact_cmp_points_count;
  13. main()
  14.   list<rat_segment> seglist;
  15.   GRAPH<rat_point,rat_segment>   G;
  16.   list<segment> seglist1;
  17.   GRAPH<point,segment> G1;
  18.   integer size;
  19.   int k = 0;
  20.   int N = read_int("N = ");
  21.   int s = read_int("s = ");
  22.   for (size = 1024, k=10; k <= 100; k+=5, size <<=5)
  23.   {
  24.    size +=  rand_int(1,23);
  25.   
  26.    seglist.clear(); 
  27.    G.clear();
  28.    G1.clear();
  29.    
  30.    integer y = size;
  31.    integer d = 2*size/(N-1);
  32.    
  33.    for(int i=0; i < N; i++)
  34.    { int rx1 = rand_int(-s,s);
  35.      int ry1 = rand_int(-s,s);
  36.      int rx2 = rand_int(-s,s);
  37.      int ry2 = rand_int(-s,s);
  38.    
  39.      rat_point p(size+rx1,2*size+y+ry1,1);
  40.      rat_point q(3*size+rx2,2*size-y+ry2,1);
  41.      seglist.append(rat_segment(p,q));
  42.      seglist1.append(segment(p.xcoord(),p.ycoord(),q.xcoord(),q.ycoord()));
  43.      y += d;
  44.     }
  45.    
  46.     cmp_points_count = 0;
  47.     exact_cmp_points_count = 0;
  48.     cout << string("sweep0: k = %2d ",k) << flush;
  49.     float T = used_time();
  50.     sweep0(seglist,G);
  51.     float t = used_time(T);
  52.     cout << string("|V|= %4d ",G.number_of_nodes());
  53.     cout << string("|E|= %4d ",G.number_of_edges());
  54.     cout << string("time = %6.2f sec  ",t);
  55.     cout << string("%.2f %%",float(exact_cmp_points_count)/cmp_points_count);
  56.     newline;
  57.     rat_point::cmp_count = 0;
  58.     rat_point::exact_cmp_count = 0;
  59.     cout << string("sweep1: k = %2d ",k) << flush;
  60.     T = used_time();
  61.     sweep(seglist,G);
  62.     t = used_time(T);
  63.     cout << string("|V|= %4d ",G.number_of_nodes());
  64.     cout << string("|E|= %4d ",G.number_of_edges());
  65.     cout << string("time = %6.2f sec  ",t);
  66.     cout << string("%.2f %%",float(exact_cmp_points_count)/cmp_points_count);
  67.     newline;
  68. /*
  69.     cout << string("sweep2: k = %2d ",k) << flush;
  70.     T = used_time();
  71.     sweep(seglist1,G1);
  72.     t = used_time(T);
  73.     cout << string("|V|= %4d ",G1.number_of_nodes());
  74.     cout << string("|E|= %4d ",G1.number_of_edges());
  75.     cout << string("time = %6.2f sec  ",t);
  76.     newline;
  77.     cout << string("LEDA  : k = %2d ",k) << flush;
  78.     T = used_time();
  79.     SWEEP_SEGMENTS(seglist1,G2);
  80.     t = used_time(T);
  81.     cout << string("|V|= %4d ",G2.number_of_nodes());
  82.     cout << string("|E|= %4d ",G2.number_of_edges());
  83.     cout << string("time = %6.2f sec  ",t);
  84.     newline;
  85. */
  86.     newline;
  87.    }
  88.   
  89.   return 0;
  90. }