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 {