Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5.  
  6. /**
  7. * Created by Piotruś on 23.04.2017.
  8. */
  9. public class Algorithms
  10. {
  11. public static final int N = 3;
  12. public static final int c;
  13. HashMap<Pair<Integer, Integer>, ArrayList<Integer>> domain;
  14. public final ArrayList<Integer> colors;
  15. int[][] matrix;
  16.  
  17. static
  18. {
  19. c = ((N % 2) == 0 ? 2 * N : 2 * N + 1);
  20. }
  21. {
  22. HashMap<Pair<Integer, Integer>, ArrayList<Integer>> d = new HashMap<>();
  23. colors = new ArrayList<>();
  24. for (int i = 1; i < c + 1; i++)
  25. colors.add(i);
  26. for (int i = 0; i < N; i++)
  27. for (int j = 0; j < N; j++)
  28. {
  29. d.put(new Pair<Integer, Integer>(i, j), new ArrayList<>(colors));
  30. }
  31. domain = d;
  32. }
  33.  
  34. Algorithms()
  35. {
  36. matrix = new int[N][N];
  37.  
  38. }
  39.  
  40. public int backtracking(int[][] matrix, Pair<Integer, Integer> position, int acc, HashSet<HashSet<Integer>> edges)
  41. {
  42. for (Integer color : colors)
  43. {
  44. int[][] copy = matrix.clone();
  45. HashSet<HashSet<Integer>> edgesCopy = new HashSet<>(edges);
  46. if (constraintsOk(copy, position, color, edgesCopy))// ograniczenia
  47. {
  48. copy[position.getFirst()][position.getSecond()] = color;
  49. if (isFinished(copy))
  50. {
  51. acc += 1;
  52. continue;
  53. }
  54. acc = backtracking(copy, getNext(copy, position), acc, edgesCopy);
  55. }
  56. }
  57. return acc;
  58. }
  59.  
  60. boolean isFinished(int[][] tab)
  61. {
  62.  
  63. for (int i = 0; i < N; i++)
  64. {
  65. for (int j = 0; j < N; j++)
  66. {
  67. if (tab[i][j] == 0)
  68. {
  69. return false;
  70. }
  71. }
  72. }
  73. for (int i = 0; i < N; i++)
  74. {
  75. for (int j = 0; j < N; j++)
  76. {
  77. System.out.print(tab[i][j]+" ");
  78. }
  79. System.out.print("\n");
  80. }
  81. System.out.print("\n");
  82. return true;
  83.  
  84. }
  85.  
  86. Pair<Integer, Integer> getNext(int[][] matrix, Pair<Integer, Integer> pos)
  87. {
  88. if (pos.getSecond() == N - 1)
  89. return new Pair<Integer, Integer>(pos.getFirst() + 1, 0);
  90. else
  91. return new Pair<Integer, Integer>(pos.getFirst(), pos.getSecond() + 1);
  92. }
  93.  
  94. boolean constraintsOk(int[][] matrix, Pair<Integer, Integer> pos, int color, HashSet<HashSet<Integer>> edges)
  95. {
  96. boolean flag = false;
  97. int x = pos.getFirst();
  98. int y = pos.getSecond();
  99. ArrayList<Pair<Integer, Integer>> neighbours = new ArrayList<>();
  100. if (y > 0)
  101. neighbours.add(new Pair<Integer, Integer>(x, y - 1));
  102. if (y < N - 1)
  103. neighbours.add(new Pair<Integer, Integer>(x, y + 1));
  104. if (x > 0)
  105. neighbours.add(new Pair<Integer, Integer>(x - 1, y));
  106. if (x < N - 1)
  107. neighbours.add(new Pair<Integer, Integer>(x + 1, y));
  108. HashSet<HashSet<Integer>> temp = new HashSet<>(edges);
  109.  
  110. for (Pair<Integer, Integer> pair : neighbours)
  111. {
  112. if (matrix[pair.getFirst()][pair.getSecond()] != color
  113. && (!temp.contains(new HashSet<>(Arrays.asList(color, matrix[pair.getFirst()][pair.getSecond()])))
  114. || matrix[pair.getFirst()][pair.getSecond()] == 0))
  115. {
  116. flag = true;
  117. temp.add(new HashSet<>(Arrays.asList(color, matrix[pair.getFirst()][pair.getSecond()])));
  118.  
  119.  
  120. } else
  121. {
  122. flag = false;
  123. break;
  124. }
  125. }
  126.  
  127. if (flag)
  128. edges.addAll(temp);
  129. return flag;
  130. }
  131.  
  132. public static void main(String args[])
  133. {
  134. HashSet<HashSet<Integer>> edges = new HashSet<>();
  135. Algorithms alg = new Algorithms();
  136. System.out.println(alg.backtracking(alg.matrix, new Pair<Integer, Integer>(0, 0), 0, edges));
  137. }
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement