Advertisement
dzocesrce

[APS] Santa Clause on Vacation

Aug 29th, 2023
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.14 KB | None | 0 0
  1. // Dedo Mraz odgleduva ribi. Gi pushta vo edno ezerce i treba da se odredi vo kolku drugi ezerca ke stignat. Ezercata se povrzani so reki (ednonasocni vrski).
  2. import java.util.Arrays;
  3. import java.util.NoSuchElementException;
  4. import java.util.Scanner;
  5. import java.util.LinkedList;
  6. class SLLNode<E> {
  7.     protected E element;
  8.     protected SLLNode<E> succ;
  9.  
  10.     public SLLNode(E elem, SLLNode<E> succ) {
  11.         this.element = elem;
  12.         this.succ = succ;
  13.     }
  14.  
  15.     @Override
  16.     public String toString() {
  17.         return element.toString();
  18.     }
  19. }
  20.  
  21. // Implementacija na redica
  22.  
  23. interface Queue<E> {
  24.  
  25.     // Elementi na redicata se objekti od proizvolen tip.
  26.  
  27.     // Metodi za pristap:
  28.  
  29.     public boolean isEmpty();
  30.  
  31.     // Vrakja true ako i samo ako redicata e prazena.
  32.  
  33.     public int size();
  34.  
  35.     // Ja vrakja dolzinata na redicata.
  36.  
  37.     public E peek();
  38.  
  39.     // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  40.  
  41.     // Metodi za transformacija:
  42.  
  43.     public void clear();
  44.  
  45.     // Ja prazni redicata.
  46.  
  47.     public void enqueue(E x);
  48.  
  49.     // Go dodava x na kraj od redicata.
  50.  
  51.     public E dequeue();
  52.     // Go otstranuva i vrakja pochetniot element na redicata.
  53.  
  54. }
  55. class LinkedQueue<E> implements Queue<E> {
  56.  
  57.     // Redicata e pretstavena na sledniot nacin:
  58.     // length go sodrzi brojot na elementi.
  59.     // Elementite se zachuvuvaat vo jazli dod SLL
  60.     // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  61.     SLLNode<E> front, rear;
  62.     int length;
  63.  
  64.     // Konstruktor ...
  65.  
  66.     public LinkedQueue() {
  67.         clear();
  68.     }
  69.  
  70.     public boolean isEmpty() {
  71.         // Vrakja true ako i samo ako redicata e prazena.
  72.         return (length == 0);
  73.     }
  74.  
  75.     public int size() {
  76.         // Ja vrakja dolzinata na redicata.
  77.         return length;
  78.     }
  79.  
  80.     public E peek() {
  81.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  82.         if (front == null)
  83.             throw new NoSuchElementException();
  84.         return front.element;
  85.     }
  86.  
  87.     public void clear() {
  88.         // Ja prazni redicata.
  89.         front = rear = null;
  90.         length = 0;
  91.     }
  92.  
  93.     public void enqueue(E x) {
  94.         // Go dodava x na kraj od redicata.
  95.         SLLNode<E> latest = new SLLNode<E>(x, null);
  96.         if (rear != null) {
  97.             rear.succ = latest;
  98.             rear = latest;
  99.         } else
  100.             front = rear = latest;
  101.         length++;
  102.     }
  103.  
  104.     public E dequeue() {
  105.         // Go otstranuva i vrakja pochetniot element na redicata.
  106.         if (front != null) {
  107.             E frontmost = front.element;
  108.             front = front.succ;
  109.             if (front == null)
  110.                 rear = null;
  111.             length--;
  112.             return frontmost;
  113.         } else
  114.             throw new NoSuchElementException();
  115.     }
  116.  
  117. }
  118.  
  119. class Graph<E> {
  120.  
  121.     int num_nodes; // broj na jazli
  122.     E nodes[]; // informacija vo jazlite - moze i ne mora?
  123.     int adjMat[][]; // matrica na sosednost
  124.  
  125.     @SuppressWarnings("unchecked")
  126.     public Graph(int num_nodes) {
  127.         this.num_nodes = num_nodes;
  128.         nodes = (E[]) new Object[num_nodes];
  129.         adjMat = new int[num_nodes][num_nodes];
  130.  
  131.         for (int i = 0; i < this.num_nodes; i++)
  132.             for (int j = 0; j < this.num_nodes; j++)
  133.                 adjMat[i][j] = 0;
  134.     }
  135.  
  136.     int adjacent(int x, int y) { // proveruva dali ima vrska od jazelot so
  137.         // indeks x do jazelot so indeks y
  138.         return (adjMat[x][y] != 0) ? 1 : 0;
  139.     }
  140.  
  141.     void addEdge(int x, int y) { // dodava vrska megu jazlite so indeksi x i y
  142.         adjMat[x][y] = 1;
  143.     }
  144.  
  145.     void deleteEdge(int x, int y) {
  146.         // ja brise vrskata megu jazlite so indeksi x i y
  147.         adjMat[x][y] = 0;
  148.         adjMat[y][x] = 0;
  149.     }
  150.  
  151.     E get_node_value(int x) { // ja vraka informacijata vo jazelot so indeks x
  152.         return nodes[x];
  153.     }
  154.  
  155.     void set_node_value(int x, E a) { // ja postavuva informacijata vo jazelot
  156.         // so indeks na a
  157.         nodes[x] = a;
  158.     }
  159.  
  160.     @Override
  161.     public String toString() {
  162.         String ret = "  ";
  163.         for (int i = 0; i < num_nodes; i++)
  164.             ret += nodes[i] + " ";
  165.         ret += "\n";
  166.         for (int i = 0; i < num_nodes; i++) {
  167.             ret += nodes[i] + " ";
  168.             for (int j = 0; j < num_nodes; j++)
  169.                 ret += adjMat[i][j] + " ";
  170.             ret += "\n";
  171.         }
  172.         return ret;
  173.     }
  174.  
  175.     public void printMatrix() {
  176.         for (int i = 0; i < num_nodes; i++) {
  177.             for (int j = 0; j < num_nodes; j++)
  178.                 System.out.print(adjMat[i][j] + " ");
  179.             System.out.println();
  180.         }
  181.     }
  182.  
  183.     int sendFishes(int node) {
  184.         //VASIOT KOD OVDE, ILI TAMU, VAS IZBOR
  185.         boolean visited[] = new boolean[num_nodes];
  186.         for (int i = 0; i < num_nodes; i++)
  187.             visited[i] = false;
  188.         visited[node] = true;
  189.         //System.out.println(node+": " + nodes[node]);
  190.         Queue<Integer> q = new LinkedQueue<Integer>();
  191.         q.enqueue(node);
  192.  
  193.         int pom;
  194.         int counter=0;
  195.         while(!q.isEmpty()){
  196.             pom = q.dequeue();
  197.             for (int i = 0; i < num_nodes; i++) {
  198.                 if(adjacent(pom, i)==1){
  199.                     if (!visited[i]){
  200.                         visited[i] = true;
  201.                         //System.out.println(i+": " + nodes[i]);
  202.                         counter++;
  203.                         q.enqueue(i);
  204.                     }
  205.  
  206.                 }
  207.             }
  208.  
  209.  
  210.         }
  211.         return counter;
  212.     }
  213. }
  214.  
  215. public class DedoMrazIRibite {
  216.  
  217.     public static void main(String[] args) {
  218.         Scanner in = new Scanner(System.in);
  219.         int N = in.nextInt();
  220.         int U = in.nextInt();
  221.         Graph<Integer> g = new Graph<>(N);
  222.         for (int i = 0; i < U; i++) {
  223.             int r = in.nextInt();
  224.             int q = in.nextInt();
  225.             g.addEdge(r, q);
  226.  
  227.         }
  228.         int L = in.nextInt();
  229.         System.out.println(g.sendFishes(L));
  230.         System.out.println("Srekna Nova Godina");
  231.         in.close();
  232.     }
  233.  
  234. }
  235. /*
  236. 7
  237. 5
  238. 0 1
  239. 1 5
  240. 0 2
  241. 2 5
  242. 6 2
  243. 0
  244. ----
  245. 3
  246. Srekna Nova Godina
  247.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement