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

MultiPlatform

  1. #include <math.h>
  2. #include <LEDA/graph.h>
  3. #include <LEDA/point.h>
  4. #include <LEDA/segment.h>
  5. #include <LEDA/rat_point.h>
  6. #include <LEDA/rat_segment.h>
  7. #include <LEDA/plane_alg.h>
  8. #define TEST_SWEEP(seglist,G,cmp_count,exact_cmp_count) {
  9. cmp_count = 0;
  10. exact_cmp_count = 0;
  11. cout << string("k = %2d  ",k) << flush;
  12. float T = used_time();
  13. SWEEP_SEGMENTS(seglist,G);
  14. float t = used_time(T);
  15. cout << string("|V|= %4d ",G.number_of_nodes());
  16. cout << string("|E|= %4d ",G.number_of_edges());
  17. cout << string("time = %6.2f sec  ",t);
  18. cout << string("%6d / %6d   (%.2f %%)",exact_cmp_count,cmp_count,
  19.                                        100*float(exact_cmp_count)/cmp_count);
  20. newline; }
  21. main()
  22.   int N  = read_int("N  = ");
  23.   int k  = read_int("k  = ");
  24.   int l = 0;
  25.   rand_int.set_seed(1234567*N);
  26.   for (; k <= 300; k+=10)
  27.   {
  28.     integer size = (1<<k)/2;
  29.     list<rat_segment> seglist;
  30.     list<segment> seglist1;
  31.     GRAPH<rat_point,rat_segment> G;
  32.     GRAPH<point,segment> G1;
  33.     for(int i=0; i < N; i++)
  34.     { integer x1 = integer::random(k)-size;
  35.       integer y1 = integer::random(k)-size;
  36.       integer w1 = 1;
  37.       integer x2 = integer::random(k)-size;
  38.       integer y2 = integer::random(k)-size;
  39.       integer w2 = 1;
  40.       rat_segment s(rat_point(x1,y1,w1),rat_point(x2,y2,w2));
  41.       seglist.append(s);
  42.       segment s1(x1.todouble(),y1.todouble(),x2.todouble(),y2.todouble());
  43.       seglist1.append(s1);
  44.      }
  45.   
  46.    int point_cmp_count;
  47.    int point_exact_cmp_count;
  48.    rat_point::use_filter = 1;
  49.    rat_segment::use_filter = true;
  50.    TEST_SWEEP(seglist,G,rat_point::cmp_count,rat_point::exact_cmp_count)
  51.    TEST_SWEEP(seglist1,G1,point_cmp_count,point_exact_cmp_count)
  52.    rat_point::use_filter = 0;
  53.    rat_segment::use_filter = false;
  54.    TEST_SWEEP(seglist,G,rat_point::cmp_count,rat_point::exact_cmp_count)
  55.    newline;
  56.    }
  57.   
  58.   return 0;
  59. }