Crazy

Социјална Мрежа

Dec 11th, 2017
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.10 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Stack;
  5. import java.util.LinkedList;
  6. import java.util.Queue;
  7.  
  8.  class GraphNode<E> {
  9.     private int index;//index (reden broj) na temeto vo grafot
  10.     private E info;
  11.     private LinkedList<GraphNode<E>> neighbors;
  12.    
  13.     public GraphNode(int index, E info) {
  14.         this.index = index;
  15.         this.info = info;
  16.         neighbors = new LinkedList<GraphNode<E>>();
  17.     }
  18.    
  19.     boolean containsNeighbor(GraphNode<E> o){
  20.         return neighbors.contains(o);
  21.     }
  22.    
  23.     void addNeighbor(GraphNode<E> o){
  24.         neighbors.add(o);
  25.     }
  26.    
  27.     void removeNeighbor(GraphNode<E> o){
  28.         if(neighbors.contains(o))
  29.             neighbors.remove(o);
  30.     }
  31.    
  32.     @Override
  33.     public String toString() {
  34.         String ret= "INFO:"+info+" SOSEDI:";
  35.         for(int i=0;i<neighbors.size();i++)
  36.         ret+=neighbors.get(i).info+" ";
  37.         return ret;
  38.        
  39.     }
  40.  
  41.     @Override
  42.     public boolean equals(Object obj) {
  43.         @SuppressWarnings("unchecked")
  44.         GraphNode<E> pom = (GraphNode<E>)obj;
  45.         return (pom.info.equals(this.info));
  46.     }
  47.  
  48.     public int getIndex() {
  49.         return index;
  50.     }
  51.  
  52.     public void setIndex(int index) {
  53.         this.index = index;
  54.     }
  55.  
  56.     public E getInfo() {
  57.         return info;
  58.     }
  59.  
  60.     public void setInfo(E info) {
  61.         this.info = info;
  62.     }
  63.  
  64.     public LinkedList<GraphNode<E>> getNeighbors() {
  65.         return neighbors;
  66.     }
  67.  
  68.     public void setNeighbors(LinkedList<GraphNode<E>> neighbors) {
  69.         this.neighbors = neighbors;
  70.     }
  71.  
  72.    
  73.    
  74. }
  75.  
  76.  class Graph<E> {
  77.  
  78.     int num_nodes;
  79.     GraphNode<E> adjList[];
  80.  
  81.     @SuppressWarnings("unchecked")
  82.     public Graph(int num_nodes, E[] list) {
  83.         this.num_nodes = num_nodes;
  84.         adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  85.         for (int i = 0; i < num_nodes; i++)
  86.             adjList[i] = new GraphNode<E>(i, list[i]);
  87.     }
  88.  
  89.     @SuppressWarnings("unchecked")
  90.     public Graph(int num_nodes) {
  91.         this.num_nodes = num_nodes;
  92.         adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  93.     }
  94.  
  95.     public void setNodeAt(int i,E a)
  96.     {
  97.         adjList[i].setInfo(a);
  98.     }
  99.     int adjacent(int x, int y) {
  100.         // proveruva dali ima vrska od jazelot so
  101.         // indeks x do jazelot so indeks y
  102.         return (adjList[x].containsNeighbor(adjList[y])) ? 1 : 0;
  103.     }
  104.  
  105.     void addEdge(int x, int y) {
  106.         // dodava vrska od jazelot so indeks x do jazelot so indeks y
  107.         if (!adjList[x].containsNeighbor(adjList[y])) {
  108.             adjList[x].addNeighbor(adjList[y]);
  109.         }
  110.     }
  111.  
  112.     void deleteEdge(int x, int y) {
  113.         adjList[x].removeNeighbor(adjList[y]);
  114.     }
  115.     int izmini(int start,int find,int n)
  116.     {
  117.         if(start==find)
  118.             return n-1;
  119.         LinkedList<GraphNode<E>> sosedi= adjList[start].getNeighbors();
  120.         if(n>num_nodes-1)
  121.             return 1000;
  122.         if(sosedi.contains(adjList[find]))
  123.             return n;
  124.         int min=10000;
  125.          int br;
  126.             for(int i=0;i<sosedi.size();i++)
  127.         {
  128.                 int index=sosedi.get(i).getIndex();
  129.                 if(index!=start)
  130.                 {
  131.                     br = izmini(index,find,n+1);
  132.                     if(br<min)
  133.                         min=br;
  134.                 }
  135.         }
  136.             return min;
  137.     }
  138.     void dfsSearch(int node) {
  139.         boolean visited[] = new boolean[num_nodes];
  140.         for (int i = 0; i < num_nodes; i++)
  141.             visited[i] = false;
  142.         dfsRecursive(node, visited);
  143.     }
  144.  
  145.     void dfsRecursive(int node, boolean visited[]) {
  146.         visited[node] = true;
  147.         System.out.println(node + ": " + adjList[node].getInfo());
  148.  
  149.         for (int i = 0; i < adjList[node].getNeighbors().size(); i++) {
  150.             GraphNode<E> pom = adjList[node].getNeighbors().get(i);
  151.             if (!visited[pom.getIndex()])
  152.                 dfsRecursive(pom.getIndex(), visited);
  153.         }
  154.     }
  155.  
  156.     void dfsNonrecursive(int node) {
  157.         boolean visited[] = new boolean[num_nodes];
  158.         for (int i = 0; i < num_nodes; i++)
  159.             visited[i] = false;
  160.         visited[node] = true;
  161.         System.out.println(node+": " + adjList[node].getInfo());
  162.         Stack<Integer> s = new Stack<Integer>();
  163.         s.push(node);
  164.  
  165.         GraphNode<E> pom;
  166.  
  167.         while (!s.isEmpty()) {
  168.             pom = adjList[s.peek()];
  169.             GraphNode<E> tmp=null;
  170.             for (int i = 0; i < pom.getNeighbors().size(); i++) {
  171.                 tmp = pom.getNeighbors().get(i);
  172.                 if (!visited[tmp.getIndex()])
  173.                     break;
  174.             }
  175.             if(tmp!=null&&!visited[tmp.getIndex()]){
  176.                 visited[tmp.getIndex()] = true;
  177.                 System.out.println(tmp.getIndex() + ": " + tmp.getInfo());
  178.                 s.push(tmp.getIndex());
  179.             }
  180.             else
  181.                 s.pop();
  182.         }
  183.  
  184.     }  
  185.     @Override
  186.     public String toString() {
  187.         String ret = new String();
  188.         for (int i = 0; i < this.num_nodes; i++)
  189.             ret += i + ": " + adjList[i] + "\n";
  190.         return ret;
  191.     }
  192.  
  193. }
  194.  
  195. public class CountFacebookFriends {
  196.     public static void main(String args[]) throws NumberFormatException, IOException{
  197.     BufferedReader bf= new BufferedReader(new InputStreamReader(System.in));
  198.     int N=Integer.parseInt(bf.readLine());
  199.     String [] d=new String[N];
  200.     Graph<String> facebook=new Graph<String>(N,d);
  201.     for(int i=0;i<N;i++)
  202.     {
  203.         int n=Integer.parseInt(bf.readLine());
  204.         for(int j=0;j<n;j++)
  205.         {
  206.             String s=bf.readLine();
  207.             String [] parts=s.split(" ");
  208.             int index=Integer.parseInt(parts[0]);
  209.             facebook.addEdge(i, index);
  210.             facebook.setNodeAt(index, parts[1]+" "+parts[2]);
  211.         }
  212.     }
  213.     int from=Integer.parseInt(bf.readLine());
  214.     int to=Integer.parseInt(bf.readLine());
  215.     System.out.println(facebook.izmini(from, to, 1));
  216.  
  217.     }
  218. }
Add Comment
Please, Sign In to add comment