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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  _prio.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef _LEDA_PRIO_H 
  12. #define _LEDA_PRIO_H 
  13. #include <LEDA/prio.h>
  14. //------------------------------------------------------------------------------
  15. //
  16. // Priority queues with implementation parameter:
  17. //
  18. //   _priority_queue<keytype,inftype,prio_impl> 
  19. //
  20. //------------------------------------------------------------------------------
  21. template <class ktype, class I, class impl> 
  22. class _priority_queue : private impl, public priority_queue<ktype,I>
  23. {
  24. int int_type() const { return LEDA_INT_TYPE(I); }
  25. int  cmp(GenPtr x, GenPtr y) const { return LEDA_COMPARE(I,x,y); }
  26. void clear_key(GenPtr& x) const { LEDA_CLEAR(I,x); }
  27. void clear_inf(GenPtr& x) const { LEDA_CLEAR(ktype,x); }
  28. void copy_key(GenPtr& x)  const { LEDA_COPY(I,x); }
  29. void copy_inf(GenPtr& x)  const { LEDA_COPY(ktype,x); }
  30. void print_key(GenPtr x)  const { LEDA_PRINT(I,x,cout); }
  31. void print_inf(GenPtr x)  const { LEDA_PRINT(ktype,x,cout); }
  32. public:
  33. pq_item insert(ktype k,I i) { return pq_item(impl::insert(Convert(i),Convert(k)));}
  34. pq_item find_min() const { return pq_item(impl::find_min());}
  35. ktype del_min() 
  36. { pq_item it = find_min();
  37.   ktype x = key(it);
  38.   del_item(it);
  39.   return x; 
  40.  }
  41. ktype key(pq_item x) const 
  42. { return LEDA_ACCESS(ktype,impl::inf(impl::item(x)));}
  43. I inf(pq_item x) const 
  44. { return LEDA_ACCESS(I,impl::key(impl::item(x)));}
  45. void change_key(pq_item x, ktype k) 
  46. { impl::change_inf(impl::item(x),Convert(k)); }
  47. void decrease_inf(pq_item x,I i)
  48. { impl::decrease_key(impl::item(x),Convert(i));}
  49. void del_item(pq_item x)        
  50. { impl::del_item(impl::item(x)); }
  51. int  size()  const { return impl::size(); }
  52. bool empty() const { return (size()==0) ? true : false; }
  53. pq_item first_item() const { return pq_item(impl::first_item()); }
  54. pq_item next_item(pq_item it) const 
  55. { return pq_item(impl::next_item(impl::item(it))); }
  56. _priority_queue<ktype,I,impl>& operator=(const _priority_queue<ktype,I,impl>& Q)
  57. { return (_priority_queue<ktype,I,impl>&)impl::operator=(Q); }
  58.  _priority_queue() {}
  59.  _priority_queue(int n) : impl(n) {}
  60.  _priority_queue(const _priority_queue<ktype,I,impl>& Q) : impl(Q) {}
  61. ~_priority_queue() { impl::clear(); }
  62. };
  63. #endif