fork download
  1. import java.util.Arrays;
  2.  
  3. interface Callback {
  4. void visit(int[] p); // n-dimensional point
  5. }
  6.  
  7. public class Main
  8. {
  9.  
  10. // bounds[] - each number the limits iteration on i'th axis from 0 to bounds[i]
  11. // current - current dimension
  12. // callback - point
  13. public static void visit(int[] bounds, int[] p, Callback c) {
  14. int numDimensions = p.length;
  15. int currentDimension = numDimensions - 1;
  16.  
  17. while (true)
  18. {
  19. for (int i = 0; i < bounds[currentDimension]; i++) {
  20. p[currentDimension] = i;
  21. c.visit(p);
  22. }
  23. while (--currentDimension >= 0 && p[currentDimension] == bounds[currentDimension] - 1);
  24. if (currentDimension < 0) break;
  25. p[currentDimension++]++;
  26. for (; currentDimension < numDimensions - 1; currentDimension++)
  27. p[currentDimension] = 0;
  28. }
  29. }
  30.  
  31. static long visits = 0;
  32. /// now visiting
  33. public static void main(String[] args) {
  34. long start = System.currentTimeMillis();
  35. visit(new int[] {50,50,50,50}, new int[4], new Callback() {
  36. public void visit(int[] p) {
  37. //System.out.println(Arrays.toString(p));
  38. visits++;
  39. }
  40. });
  41. long end = System.currentTimeMillis();
  42. System.out.println(visits + " visits");
  43. System.out.println("Time: " + (end - start) + " ms");
  44. }
  45.  
  46. }
Success #stdin #stdout 0.07s 245632KB
stdin
Standard input is empty
stdout
6250000 visits
Time: 40 ms