Advertisement
LonelyShepherd

Социјална мрежа [Лаб. 8.3]

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