现在的位置: 首页 > 综合 > 正文

算法导论-14.3-7-O(nlgn)时间求矩形集合中重叠矩形的个数 算法导论-14.3-7-O(nlgn)时间求矩形集合中重叠矩形的个数

2013年04月30日 ⁄ 综合 ⁄ 共 1007字 ⁄ 字号 评论关闭

算法导论-14.3-7-O(nlgn)时间求矩形集合中重叠矩形的个数

分类: 算法导论 446人阅读 评论(6) 收藏 举报

目录(?)[+]

一、题目

二、思考

采用红黑树作为基础数据结构,扩展为14.3中的区间树。

第一步:

对每个矩形的左边x和右边x排序,排序结果放在一个序列中。并记录每个x值属于哪个矩形。

如三个矩形的x区间(左边x,右边x)分别是(1,3),(2,4),(3,5),排序结果(x值,属于哪个矩形)是(1,1),(2,2),(3,1),(3,3),(4,2),(5,3)。

第二步:

依次处理排序结果(x,i)。

(1)如果x是矩形i的左边x,则求出区间树中与矩形i的y区间相交的区间个数,再把矩形i的y区间插入到区间树中。

(2)如果x是矩形i的右边x,则将矩形i的y区间从区间树中删除

三、代码

  1. #include <iostream>  
  2. #include <algorithm>  
  3. using namespace std;  
  4.   
  5. #define BLACK 0  
  6. #define RED 1  
  7. #define N 10//矩形的个数  
  8. //区间结构  
  9. struct interval  
  10. {  
  11.     int low;  
  12.     int high;  
  13.     interval(){};  
  14.     interval(int l, int h):low(l), high(h){}  
  15.     bool operator==(interval &b)  
  16.     {  
  17.         if(low == b.low && high == b.high)  
  18.             return 1;  
  19.         return 0;  
  20.     }  
  21. };  
  22. //矩形结构  
  23. struct Rectangle  
  24. {  
  25.     interval x;  
  26.     interval y;  
  27. };  
  28. //用于排序  
  29. struct Sort_Node  
  30. {  
  31.     int x;  
  32.     int id;//x所属的矩形的编号  
  33.     Sort_Node(){}  
  34.     Sort_Node(int a, int b):x(a),id(b){}  
  35. };  
  36. //用于排序  
  37. bool cmp(Sort_Node a, Sort_Node b)  
  38. {  

抱歉!评论已关闭.