lemon/hypercube_graph.h
changeset 372 7b6466ed488a
parent 365 a12eef1f82b2
child 440 88ed40ad0d4f
     1.1 --- a/lemon/hypercube_graph.h	Fri Nov 07 07:18:37 2008 +0000
     1.2 +++ b/lemon/hypercube_graph.h	Fri Nov 07 13:04:54 2008 +0000
     1.3 @@ -50,7 +50,7 @@
     1.4        LEMON_ASSERT(dim >= 1, "The number of dimensions must be at least 1.");
     1.5        _dim = dim;
     1.6        _node_num = 1 << dim;
     1.7 -      _edge_num = dim * (1 << dim-1);
     1.8 +      _edge_num = dim * (1 << (dim-1));
     1.9      }
    1.10  
    1.11    public:
    1.12 @@ -76,15 +76,15 @@
    1.13      static int id(Arc arc) { return arc._id; }
    1.14  
    1.15      Node u(Edge edge) const {
    1.16 -      int base = edge._id & ((1 << _dim-1) - 1);
    1.17 -      int k = edge._id >> _dim-1;
    1.18 -      return ((base >> k) << k+1) | (base & ((1 << k) - 1));
    1.19 +      int base = edge._id & ((1 << (_dim-1)) - 1);
    1.20 +      int k = edge._id >> (_dim-1);
    1.21 +      return ((base >> k) << (k+1)) | (base & ((1 << k) - 1));
    1.22      }
    1.23  
    1.24      Node v(Edge edge) const {
    1.25 -      int base = edge._id & ((1 << _dim-1) - 1);
    1.26 -      int k = edge._id >> _dim-1;
    1.27 -      return ((base >> k) << k+1) | (base & ((1 << k) - 1)) | (1 << k);
    1.28 +      int base = edge._id & ((1 << (_dim-1)) - 1);
    1.29 +      int k = edge._id >> (_dim-1);
    1.30 +      return ((base >> k) << (k+1)) | (base & ((1 << k) - 1)) | (1 << k);
    1.31      }
    1.32  
    1.33      Node source(Arc arc) const {
    1.34 @@ -105,13 +105,14 @@
    1.35        if (d == 0) return INVALID;
    1.36        for ( ; (d & 1) == 0; d >>= 1) ++k;
    1.37        if (d >> 1 != 0) return INVALID;
    1.38 -      return (k << _dim-1) | ((u._id >> k+1) << k) | (u._id & ((1 << k) - 1));
    1.39 +      return (k << (_dim-1)) | ((u._id >> (k+1)) << k) |
    1.40 +        (u._id & ((1 << k) - 1));
    1.41      }
    1.42  
    1.43      Arc findArc(Node u, Node v, Arc prev = INVALID) const {
    1.44        Edge edge = findEdge(u, v, prev);
    1.45        if (edge == INVALID) return INVALID;
    1.46 -      int k = edge._id >> _dim-1;
    1.47 +      int k = edge._id >> (_dim-1);
    1.48        return ((u._id >> k) & 1) == 1 ? edge._id << 1 : (edge._id << 1) | 1;
    1.49      }
    1.50  
    1.51 @@ -194,10 +195,10 @@
    1.52  
    1.53      void nextInc(Edge& edge, bool& dir) const {
    1.54        Node n = dir ? u(edge) : v(edge);
    1.55 -      int k = (edge._id >> _dim-1) + 1;
    1.56 +      int k = (edge._id >> (_dim-1)) + 1;
    1.57        if (k < _dim) {
    1.58 -        edge._id = (k << _dim-1) |
    1.59 -                   ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
    1.60 +        edge._id = (k << (_dim-1)) |
    1.61 +          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    1.62          dir = ((n._id >> k) & 1) == 0;
    1.63        } else {
    1.64          edge._id = -1;
    1.65 @@ -213,8 +214,8 @@
    1.66        Node n = (arc._id & 1) == 1 ? u(arc) : v(arc);
    1.67        int k = (arc._id >> _dim) + 1;
    1.68        if (k < _dim) {
    1.69 -        arc._id = (k << _dim-1) |
    1.70 -                  ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
    1.71 +        arc._id = (k << (_dim-1)) |
    1.72 +          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    1.73          arc._id = (arc._id << 1) | (~(n._id >> k) & 1);
    1.74        } else {
    1.75          arc._id = -1;
    1.76 @@ -229,8 +230,8 @@
    1.77        Node n = (arc._id & 1) == 1 ? v(arc) : u(arc);
    1.78        int k = (arc._id >> _dim) + 1;
    1.79        if (k < _dim) {
    1.80 -        arc._id = (k << _dim-1) |
    1.81 -                  ((n._id >> k+1) << k) | (n._id & ((1 << k) - 1));
    1.82 +        arc._id = (k << (_dim-1)) |
    1.83 +          ((n._id >> (k+1)) << k) | (n._id & ((1 << k) - 1));
    1.84          arc._id = (arc._id << 1) | ((n._id >> k) & 1);
    1.85        } else {
    1.86          arc._id = -1;
    1.87 @@ -254,7 +255,7 @@
    1.88      }
    1.89  
    1.90      int dimension(Edge edge) const {
    1.91 -      return edge._id >> _dim-1;
    1.92 +      return edge._id >> (_dim-1);
    1.93      }
    1.94  
    1.95      int dimension(Arc arc) const {