Advertisement
lameski

Untitled

May 31st, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.36 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import java.util.Queue;
  7. import java.util.Scanner;
  8. import java.util.Stack;
  9.  
  10. import org.omg.CORBA.INITIALIZE;
  11.  
  12. class GraphNode<E> {
  13. private int index;// index (reden broj) na temeto vo grafot
  14. private E info;
  15. private LinkedList<GraphNode<E>> neighbors;
  16.  
  17. public GraphNode(int index, E info) {
  18. this.index = index;
  19. this.info = info;
  20. neighbors = new LinkedList<GraphNode<E>>();
  21. }
  22.  
  23. boolean containsNeighbor(GraphNode<E> o) {
  24. return neighbors.contains(o);
  25. }
  26.  
  27. void addNeighbor(GraphNode<E> o) {
  28. neighbors.add(o);
  29. }
  30.  
  31. void removeNeighbor(GraphNode<E> o) {
  32. if (neighbors.contains(o))
  33. neighbors.remove(o);
  34. }
  35.  
  36. @Override
  37. public String toString() {
  38. String ret = "INFO:" + index + " SOSEDI:";
  39. for (int i = 0; i < neighbors.size(); i++)
  40. ret += neighbors.get(i).index + " ";
  41. return ret;
  42.  
  43. }
  44.  
  45. @Override
  46. public boolean equals(Object obj) {
  47. @SuppressWarnings("unchecked")
  48. GraphNode<E> pom = (GraphNode<E>) obj;
  49. return (pom.info.equals(this.info));
  50. }
  51.  
  52. public int getIndex() {
  53. return index;
  54. }
  55.  
  56. public void setIndex(int index) {
  57. this.index = index;
  58. }
  59.  
  60. public E getInfo() {
  61. return info;
  62. }
  63.  
  64. public void setInfo(E info) {
  65. this.info = info;
  66. }
  67.  
  68. public LinkedList<GraphNode<E>> getNeighbors() {
  69. return neighbors;
  70. }
  71.  
  72. public void setNeighbors(LinkedList<GraphNode<E>> neighbors) {
  73. this.neighbors = neighbors;
  74. }
  75.  
  76. }
  77.  
  78. class Graph<E> {
  79.  
  80. int num_nodes;
  81. GraphNode<E> adjList[];
  82.  
  83. @SuppressWarnings("unchecked")
  84. public Graph(int num_nodes) {
  85. this.num_nodes = num_nodes;
  86. adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  87. }
  88.  
  89. int adjacent(int x, int y) {
  90. // proveruva dali ima vrska od jazelot so
  91. // indeks x do jazelot so indeks y
  92. return (adjList[x].containsNeighbor(adjList[y])) ? 1 : 0;
  93. }
  94.  
  95. void addEdge(int x, int y) {
  96. // dodava vrska od jazelot so indeks x do jazelot so indeks y
  97. if (!adjList[x].containsNeighbor(adjList[y])) {
  98. adjList[x].addNeighbor(adjList[y]);
  99. }
  100. }
  101.  
  102. void deleteEdge(int x, int y) {
  103. adjList[x].removeNeighbor(adjList[y]);
  104. }
  105.  
  106. @Override
  107. public String toString() {
  108. String ret = new String();
  109. for (int i = 0; i < this.num_nodes; i++) {
  110. ret += i + ": " + adjList[i] + "\n";
  111. }
  112. return ret;
  113. }
  114.  
  115. /*
  116. * ***********************TOPOLOGICAL SORT
  117. *******************************************************************/
  118.  
  119. void dfsVisit(Stack<Integer> s, int i, boolean[] visited) {
  120. if (!visited[i]) {
  121. visited[i] = true;
  122. Iterator<GraphNode<E>> it = adjList[i].getNeighbors().iterator();
  123. System.out.println("dfsVisit: " + i + " Stack=" + s);
  124. while (it.hasNext()) {
  125. dfsVisit(s, it.next().getIndex(), visited);
  126. }
  127. s.push(i);
  128. System.out.println("--dfsVisit: " + i + " Stack=" + s);
  129. }
  130. }
  131.  
  132. void topological_sort_dfs() {
  133. boolean visited[] = new boolean[num_nodes];
  134. for (int i = 0; i < num_nodes; i++) {
  135. visited[i] = false;
  136. }
  137.  
  138. Stack<Integer> s = new Stack<Integer>();
  139.  
  140. for (int i = 0; i < num_nodes; i++) {
  141. dfsVisit(s, i, visited);
  142. }
  143. System.out.println("----Stack=" + s);
  144. while (!s.isEmpty()) {
  145. System.out.println(adjList[s.pop()]);
  146. }
  147. }
  148.  
  149. public ArrayList<GraphNode<E>> bfs(int node) {
  150. ArrayList<GraphNode<E>> gn = new ArrayList<>();
  151. boolean visited[] = new boolean[num_nodes];
  152. for (int i = 0; i < num_nodes; i++)
  153. visited[i] = false;
  154. visited[node] = true;
  155. // System.out.println(node+": " + adjList[node].getInfo());
  156. Queue<Integer> q = new LinkedList<Integer>();
  157. q.add(node);
  158.  
  159. GraphNode<E> pom;
  160.  
  161. while (!q.isEmpty()) {
  162. pom = adjList[q.poll()];
  163. GraphNode<E> tmp = null;
  164. if (pom.getInfo().equals("ne"))
  165. gn.add(pom);
  166. for (int i = 0; i < pom.getNeighbors().size(); i++) {
  167. tmp = pom.getNeighbors().get(i);
  168. /*
  169. * else continue;
  170. */
  171. if (!visited[tmp.getIndex()]) {
  172. visited[tmp.getIndex()] = true;
  173. // System.out.println(tmp.getIndex()+": " + tmp.getInfo());
  174. q.add(tmp.getIndex());
  175. }
  176. }
  177.  
  178. }
  179. return gn;
  180.  
  181. }
  182.  
  183. }
  184.  
  185. public class Mraz {
  186. public static void main(String[] args) {
  187. Scanner in = new Scanner(System.in);
  188. int n = Integer.parseInt(in.nextLine());
  189.  
  190. Graph g = new Graph(n);
  191.  
  192. for (int i = 0; i < n; i++) {
  193.  
  194. String[] line = in.nextLine().split(" ");
  195. g.adjList[i] = new GraphNode<>(i, line[1]);
  196. }
  197. n = Integer.parseInt(in.nextLine());
  198. for (int i = 0; i < n; i++) {
  199. String[] line = in.nextLine().split(" ");
  200. g.addEdge(Integer.parseInt(line[0]), Integer.parseInt(line[1]));
  201. g.addEdge(Integer.parseInt(line[1]), Integer.parseInt(line[0]));
  202.  
  203. System.out.println(line[0] + " " + line[1] + " "
  204. +g.adjacent(Integer.parseInt(line[0]),
  205. Integer.parseInt(line[1])));
  206.  
  207. }
  208. System.out.println(g.toString());
  209. int start = Integer.parseInt(in.nextLine());
  210.  
  211. // System.out.println(g.toString());
  212. ArrayList<GraphNode> al = g.bfs(start);
  213. boolean visited[] = new boolean[n];
  214.  
  215. for (int i = 0; i < al.size(); i++) {
  216. // System.out.println(al.get(i).getIndex());
  217. }
  218. Arrays.fill(visited, false);
  219. int count = 0;
  220. for (int i = 0; i < al.size(); i++) {
  221. // System.out.println(al.get(i).getNeighbors().size());
  222. for (int j = 0; j < al.get(i).getNeighbors().size(); j++) {
  223. GraphNode pom = (GraphNode) al.get(i).getNeighbors().get(j);
  224. System.out.println(al.get(i).getNeighbors());
  225. // System.out.println(pom.getIndex()+" neighbors I");
  226. if (pom.getInfo().equals("da") && !visited[pom.getIndex()]) {
  227. visited[pom.getIndex()] = true;
  228. // System.out.println(pom.getIndex());
  229. count++;
  230. }
  231. for (int h = 0; h < pom.getNeighbors().size(); h++) {
  232. GraphNode pom2 = (GraphNode) pom.getNeighbors().get(h);
  233. // System.out.println(pom2.getIndex() + " neighbors II ");
  234. // pom.getIndex() + " pom");
  235. if (pom2.getInfo().equals("da") && !visited[pom2.getIndex()]) {
  236. count++;
  237. visited[pom2.getIndex()] = true;
  238. // System.out.println(pom2.getIndex());
  239. }
  240.  
  241. }
  242. // visited[pom.getIndex()] = true;
  243. }
  244. }
  245.  
  246. for (int i = 0; i < g.adjList[3].getNeighbors().size(); i++) {
  247. GraphNode pom2 = (GraphNode) g.adjList[3].getNeighbors().get(i);
  248. // System.out.println(pom2.getIndex());// + g.adjacent(3, 5));
  249.  
  250. }
  251. System.out.println(count);
  252. }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement