Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. package system;
  2.  
  3. import java.util.*;
  4. import java.util.stream.Collectors;
  5.  
  6. public class Mapper {
  7.  
  8. private static class Vertex {
  9. private int uniqueLabel;
  10.  
  11. public Vertex(int uniqueLabel) {
  12. super();
  13. this.uniqueLabel = uniqueLabel;
  14. }
  15.  
  16. @Override
  17. public boolean equals(Object obj) {
  18. if (this == obj) return true;
  19. if (!(obj instanceof Vertex)) return false;
  20.  
  21. Vertex _obj = (Vertex) obj;
  22. return _obj.uniqueLabel == uniqueLabel;
  23. }
  24.  
  25. @Override
  26. public int hashCode() {
  27. return uniqueLabel;
  28. }
  29.  
  30. public int getLabel() {
  31. return uniqueLabel;
  32. }
  33.  
  34. public void setLabel(int uniqueLabel) {
  35. this.uniqueLabel = uniqueLabel;
  36. }
  37.  
  38. @Override
  39. public String toString() {
  40. return "Vertex{" +
  41. "uniqueLabel=" + uniqueLabel +
  42. '}';
  43. }
  44.  
  45.  
  46. }
  47.  
  48. private static class Edge {
  49. private static final int DEFAULT_WEIGHT = 1;
  50.  
  51. Vertex v1, v2;
  52. int weight;
  53.  
  54. public Edge(Vertex v1, Vertex v2) {
  55. this(v1, v2, DEFAULT_WEIGHT);
  56. }
  57.  
  58. public Edge(Vertex v1, Vertex v2, int weight) {
  59. super();
  60. this.v1 = v1;
  61. this.v2 = v2;
  62. this.weight = weight;
  63. }
  64.  
  65. @Override
  66. public boolean equals(Object obj) {
  67. if (this == obj) return true;
  68. if (!(obj instanceof Edge)) return false;
  69.  
  70. Edge _obj = (Edge) obj;
  71. return _obj.v1.equals(v1) && _obj.v2.equals(v2) &&
  72. _obj.weight == weight;
  73. }
  74.  
  75. @Override
  76. public int hashCode() {
  77. int result = v1.hashCode();
  78. result = 31 * result + v2.hashCode();
  79. result = 31 * result + weight;
  80. return result;
  81. }
  82.  
  83. public Vertex getV1() {
  84. return v1;
  85. }
  86.  
  87. public Vertex getV2() {
  88. return v2;
  89. }
  90.  
  91. public int getWeight() {
  92. return weight;
  93. }
  94.  
  95. @Override
  96. public String toString() {
  97. return "Edge{" +
  98. "v1=" + v1 +
  99. ", v2=" + v2 +
  100. ", weight=" + weight +
  101. '}';
  102. }
  103. }
  104.  
  105. private static class Graph {
  106. private Set<Vertex> vertices;
  107. private Set<Edge> edges;
  108. private Map<Vertex, Set<Edge>> adjList;
  109.  
  110. public Graph() {
  111. vertices = new HashSet<>();
  112. edges = new HashSet<>();
  113. adjList = new HashMap<>();
  114. }
  115.  
  116. public boolean addVertex(int label) {
  117. return vertices.add(new Vertex(label));
  118. }
  119.  
  120. public boolean addVertex(Vertex v) {
  121. return vertices.add(v);
  122. }
  123.  
  124. public boolean addVertices(Collection<Vertex> vertices) {
  125. return this.vertices.addAll(vertices);
  126. }
  127.  
  128. public boolean removeVertex(int label) {
  129. return vertices.remove(new Vertex(label));
  130. }
  131.  
  132. public boolean removeVertex(Vertex v) {
  133. return vertices.remove(v);
  134. }
  135.  
  136. public boolean addEdge(Edge e) {
  137. if (!edges.add(e)) return false;
  138.  
  139. adjList.putIfAbsent(e.v1, new HashSet<>());
  140. adjList.putIfAbsent(e.v2, new HashSet<>());
  141.  
  142. adjList.get(e.v1).add(e);
  143. adjList.get(e.v2).add(e);
  144.  
  145. return true;
  146. }
  147.  
  148. public boolean addEdge(int vertexLabel1, int vertexLabel2) {
  149. return addEdge(new Edge(new Vertex(vertexLabel1),
  150. new Vertex(vertexLabel2)));
  151. }
  152.  
  153. public boolean removeEdge(Edge e) {
  154. if (!edges.remove(e)) return false;
  155. Set<Edge> edgesOfV1 = adjList.get(e.v1);
  156. Set<Edge> edgesOfV2 = adjList.get(e.v2);
  157.  
  158. if (edgesOfV1 != null) edgesOfV1.remove(e);
  159. if (edgesOfV2 != null) edgesOfV2.remove(e);
  160.  
  161. return true;
  162. }
  163.  
  164. public boolean removeEdge(int vertexLabel1, int vertexLabel2) {
  165. return removeEdge(new Edge(new Vertex(vertexLabel1),
  166. new Vertex(vertexLabel2)));
  167. }
  168.  
  169. public Set<Vertex> getAdjVertices(Vertex v) {
  170. return adjList.get(v).stream()
  171. .map(e -> e.v1.equals(v) ? e.v2 : e.v1)
  172. .collect(Collectors.toSet());
  173. }
  174.  
  175. public Set<Vertex> getVertices() {
  176. return Collections.unmodifiableSet(vertices);
  177. }
  178.  
  179. public Set<Edge> getEdges() {
  180. return Collections.unmodifiableSet(edges);
  181. }
  182.  
  183. public Map<Vertex, Set<Edge>> getAdjList() {
  184. return Collections.unmodifiableMap(adjList);
  185. }
  186.  
  187.  
  188.  
  189. @Override
  190. public String toString() {
  191. return "Graph{" +
  192. "vertices=" + vertices +
  193. ", edges=" + edges +
  194. ", adjList=" + adjList +
  195. '}';
  196. }
  197. }
  198.  
  199.  
  200.  
  201. public static void main(String[] args) {
  202. Graph city = new Graph();
  203. ArrayList<Integer> corners = new ArrayList<>();
  204. for (int x = 0; x < 40; x += 10 ) {
  205. for (int y = 0; y < 4; y++) {
  206. corners.add(x+y);
  207. city.addVertex(x+y);
  208. }
  209. }
  210. for (int i :corners) {
  211. if (corners.contains(i+1)) {
  212. city.addEdge(i, i+1);
  213. } if (corners.contains(i + 10)) {
  214. city.addEdge(i, i+10);
  215. }
  216. }
  217. System.out.println(city.getAdjVertices(new Vertex(33)));
  218. System.out.println(city.getAdjList().toString());
  219. }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement