Advertisement
lameski

Untitled

Jun 4th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.89 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.  
  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. return (this.index == pom.index);
  51. }
  52.  
  53. public int getIndex() {
  54. return index;
  55. }
  56.  
  57. public void setIndex(int index) {
  58. this.index = index;
  59. }
  60.  
  61. public E getInfo() {
  62. return info;
  63. }
  64.  
  65. public void setInfo(E info) {
  66. this.info = info;
  67. }
  68.  
  69. public LinkedList<GraphNode<E>> getNeighbors() {
  70. return neighbors;
  71. }
  72.  
  73. public void setNeighbors(LinkedList<GraphNode<E>> neighbors) {
  74. this.neighbors = neighbors;
  75. }
  76.  
  77. }
  78.  
  79. class Graph<E> {
  80.  
  81. int num_nodes;
  82. GraphNode<E> adjList[];
  83.  
  84. @SuppressWarnings("unchecked")
  85. public Graph(int num_nodes) {
  86. this.num_nodes = num_nodes;
  87. adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  88. }
  89.  
  90. int adjacent(int x, int y) {
  91. // proveruva dali ima vrska od jazelot so
  92. // indeks x do jazelot so indeks y
  93. return (adjList[x].containsNeighbor(adjList[y])) ? 1 : 0;
  94. }
  95.  
  96. void addEdge(int x, int y) {
  97. // dodava vrska od jazelot so indeks x do jazelot so indeks y
  98. if (!adjList[x].containsNeighbor(adjList[y])) {
  99. adjList[x].addNeighbor(adjList[y]);
  100. }
  101. }
  102.  
  103. void deleteEdge(int x, int y) {
  104. adjList[x].removeNeighbor(adjList[y]);
  105. }
  106.  
  107. @Override
  108. public String toString() {
  109. String ret = new String();
  110. for (int i = 0; i < this.num_nodes; i++) {
  111. ret += i + ": " + adjList[i] + "\n";
  112. }
  113. return ret;
  114. }
  115.  
  116.  
  117. // * ***********************TOPOLOGICAL SORT
  118. // ******************************************************************
  119.  
  120. void dfsVisit(Stack<Integer> s, int i, boolean[] visited) {
  121. if (!visited[i]) {
  122. visited[i] = true;
  123. Iterator<GraphNode<E>> it = adjList[i].getNeighbors().iterator();
  124. System.out.println("dfsVisit: " + i + " Stack=" + s);
  125. while (it.hasNext()) {
  126. dfsVisit(s, it.next().getIndex(), visited);
  127. }
  128. s.push(i);
  129. System.out.println("--dfsVisit: " + i + " Stack=" + s);
  130. }
  131. }
  132.  
  133. void topological_sort_dfs() {
  134. boolean visited[] = new boolean[num_nodes];
  135. for (int i = 0; i < num_nodes; i++) {
  136. visited[i] = false;
  137. }
  138.  
  139. Stack<Integer> s = new Stack<Integer>();
  140.  
  141. for (int i = 0; i < num_nodes; i++) {
  142. dfsVisit(s, i, visited);
  143. }
  144. System.out.println("----Stack=" + s);
  145. while (!s.isEmpty()) {
  146. System.out.println(adjList[s.pop()]);
  147. }
  148. }
  149.  
  150. public ArrayList<GraphNode<E>> bfs(int node) {
  151. ArrayList<GraphNode<E>> gn = new ArrayList<>();
  152. boolean visited[] = new boolean[num_nodes];
  153. for (int i = 0; i < num_nodes; i++)
  154. visited[i] = false;
  155. visited[node] = true;
  156. // System.out.println(node+": " + adjList[node].getInfo());
  157. Queue<Integer> q = new LinkedList<Integer>();
  158. q.add(node);
  159.  
  160. GraphNode<E> pom;
  161. //boolean temp = false;
  162. while (!q.isEmpty()) {
  163. pom = adjList[q.poll()];
  164. GraphNode<E> tmp = null;
  165. if (pom.getInfo().equals("ne"))
  166. gn.add(pom);
  167. for (int i = 0; i < pom.getNeighbors().size(); i++) {
  168. tmp = pom.getNeighbors().get(i);
  169. //else continue;
  170. if(tmp.getInfo().equals("da"))
  171. break;
  172. if (!visited[tmp.getIndex()]) {
  173. visited[tmp.getIndex()] = true;
  174. // System.out.println(tmp.getIndex()+": " + tmp.getInfo());
  175. //if(!temp)
  176. q.add(tmp.getIndex());
  177. }
  178. }
  179.  
  180. }
  181. return gn;
  182.  
  183. }
  184. ArrayList<Integer> dfsRecursive(int node, boolean visited[], int count, ArrayList<Integer> al) {
  185. visited[node] = true;
  186. // System.out.println(node + ": " + adjList[node].getInfo());
  187. if(count==2)
  188. return al;
  189. for (int i = 0; i < adjList[node].getNeighbors().size(); i++) {
  190. GraphNode<E> pom = adjList[node].getNeighbors().get(i);
  191. if (!visited[pom.getIndex()])
  192. {
  193. count++;
  194. al.add(pom.getIndex());
  195. System.out.println(pom.getIndex()+ "DFS");
  196. dfsRecursive(pom.getIndex(), visited,count, al);
  197. }
  198. }
  199. return al;
  200. }
  201.  
  202. }
  203.  
  204. public class Mraz {
  205. public static void main(String[] args) {
  206. Scanner in = new Scanner(System.in);
  207. int n = Integer.parseInt(in.nextLine());
  208.  
  209. Graph g = new Graph(n);
  210.  
  211. for (int i = 0; i < n; i++) {
  212.  
  213. String[] line = in.nextLine().split(" ");
  214. g.adjList[i] = new GraphNode<>(i, line[1]);
  215. }
  216. n = Integer.parseInt(in.nextLine());
  217. for (int i = 0; i < n; i++) {
  218. String[] line = in.nextLine().split(" ");
  219. g.addEdge(Integer.parseInt(line[0]), Integer.parseInt(line[1]));
  220. g.addEdge(Integer.parseInt(line[1]), Integer.parseInt(line[0]));
  221.  
  222. // System.out.println(line[0] + " " + line[1] + " "
  223. // +g.adjacent(Integer.parseInt(line[0]),
  224. // Integer.parseInt(line[1])));
  225.  
  226. }
  227. // System.out.println(g.toString());
  228. int start = Integer.parseInt(in.nextLine());
  229.  
  230. // System.out.println(g.toString());
  231. //ArrayList<GraphNode> al = g.bfs(start);
  232.  
  233. // for (int i = 0; i < al.size(); i++) {
  234. // System.out.println(al.get(i).getIndex());
  235. // }
  236. ArrayList<GraphNode> al = g.bfs(start);
  237. boolean visited[] = new boolean[n];
  238.  
  239. for (int i = 0; i < al.size(); i++) {
  240. System.out.println(al.get(i).getIndex() + "BFS");
  241. }
  242. Arrays.fill(visited, false);
  243. int count = 0;
  244. for (int i = 0; i < al.size(); i++) {
  245. // System.out.println(al.get(i).getNeighbors().size());
  246. for (int j = 0; j < al.get(i).getNeighbors().size(); j++) {
  247. GraphNode pom = (GraphNode) al.get(i).getNeighbors().get(j);
  248. // System.out.println(al.get(i).getNeighbors());
  249. System.out.println(pom.getIndex()+" neighbors I");
  250. if (pom.getInfo().equals("da") && !visited[pom.getIndex()]) {
  251. visited[pom.getIndex()] = true;
  252. // System.out.println(pom.getIndex());
  253. count++;
  254. }
  255. for (int h = 0; h < pom.getNeighbors().size(); h++) {
  256. GraphNode pom2 = (GraphNode) pom.getNeighbors().get(h);
  257. System.out.println(pom2.getIndex() + " neighbors II ");
  258. // pom.getIndex() + " pom");
  259. if (pom2.getInfo().equals("da") && !visited[pom2.getIndex()]) {
  260. count++;
  261. visited[pom2.getIndex()] = true;
  262. // System.out.println(pom2.getIndex());
  263. }
  264.  
  265. }
  266. // visited[pom.getIndex()] = true;
  267. }
  268. }
  269. //void dfsNonrecursive(int node) {
  270. ArrayList<ArrayList<Integer>> all = new ArrayList<>();
  271. for(int i=0; i<al.size(); i++)
  272. {
  273. //visited[al.get(i).getIndex()] =false;
  274. g.dfsRecursive(al.get(i).getIndex(), visited, 0, all);
  275. // System.out.println(al.get(i).getIndex() + "____");
  276. }
  277.  
  278. //for(int j=0; j<all.get(i).size(); j++)
  279. for (int i = 0; i < all.size(); i++) {
  280. {
  281. System.out.println(all.get(i));
  282. }
  283. //}
  284. System.out.println(count);
  285. }
  286. }
  287. 10
  288. 0 da
  289. 1 da
  290. 2 da
  291. 3 ne
  292. 4 ne
  293. 5 da
  294. 6 ne
  295. 7 ne
  296. 8 ne
  297. 9 ne
  298. 11
  299. 0 1
  300. 0 2
  301. 1 3
  302. 2 4
  303. 3 4
  304. 3 5
  305. 6 4
  306. 5 7
  307. 6 8
  308. 7 9
  309. 8 9
  310. 9
  311. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement