Advertisement
Kame3

Избор на предмет на факултет lab10.1

Jan 12th, 2021
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.36 KB | None | 0 0
  1. Избор на предмет на факултет Problem 1 (0 / 0)
  2.  
  3. На еден факултет се поставени предмети кои задолжително треба да се слушаат и изборни предмети. За секој предмет е даден предуслов: кои предмети треба да се положени за да може да се слуша избраниот предмет. Ваша задача е да за даден последен положен предмет, да најдете кој е следен предмет кој може да го слуша студентот.
  4.  
  5. Влез: Во првиот ред е даден број n - број на предмети Во следните n редови се дадени шифрите на предметите. Во следнииот ред е даден број m - број на зависности Во следните m реда се дадени шифри на предмети, разделени со празно место. Првата шифра го означува предметот за кој се дефинира зависност, а следните шифри се предметите кои треба да се положени за да се слуша предметот даден со првата шифра. Во последниот ред е дадена шифрата на последниот слушан предмет.
  6.  
  7. Излез: Се печати шифрата на следниот предмет кој треба да се слуша.
  8.  
  9.  
  10. import java.util.HashMap;
  11. import java.util.LinkedList;
  12. import java.util.Map;
  13. import java.util.Scanner;
  14. import java.util.Stack;
  15.  
  16. public class IzborPredmet {
  17.  
  18.     public static void main(String[] args) {
  19.        
  20.         Scanner scan = new Scanner(System.in);
  21.        
  22.         int n = scan.nextInt();
  23.         scan.nextLine();
  24.         Map<String, Integer> map = new HashMap<>();
  25.         String [] vertices = new String[n];
  26.        
  27.         for (int i=0; i < n; ++i) {
  28.             String vertex = scan.nextLine();
  29.             vertices[i] = vertex;
  30.             map.put(vertex, i);
  31.         }
  32.        
  33.         Graph<String> graph = new Graph(n, vertices);
  34.        
  35.         int m = scan.nextInt();
  36.         scan.nextLine();
  37.        
  38.         for (int i=0; i < m; ++i) {
  39.             String line = scan.nextLine();
  40.             String parts[] = line.split(" ");
  41.             String node = parts[0];
  42.            
  43.                 String node1 = parts[parts.length-1];
  44.                 graph.addEdge(map.get(node1), map.get(node));
  45.            
  46.         }
  47.        
  48.         String toSearch = scan.nextLine();
  49.         LinkedList<GraphNode<String>> list = graph.adjList[map.get(toSearch)].getNeighbors();
  50.         System.out.println(list.get(0).getInfo());
  51.     }
  52.  
  53. }
  54.  
  55. class GraphNode<E> {
  56.     private int index;//index (reden broj) na temeto vo grafot
  57.     private E info;
  58.     private LinkedList<GraphNode<E>> neighbors;
  59.    
  60.     public GraphNode(int index, E info) {
  61.         this.index = index;
  62.         this.info = info;
  63.         neighbors = new LinkedList<GraphNode<E>>();
  64.     }
  65.    
  66.     boolean containsNeighbor(GraphNode<E> o){
  67.         return neighbors.contains(o);
  68.     }
  69.    
  70.     void addNeighbor(GraphNode<E> o){
  71.         neighbors.add(o);
  72.     }
  73.    
  74.     void removeNeighbor(GraphNode<E> o){
  75.         if(neighbors.contains(o))
  76.             neighbors.remove(o);
  77.     }
  78.    
  79.     @Override
  80.     public String toString() {
  81.         String ret= "INFO:"+info+" SOSEDI:";
  82.         for(int i=0;i<neighbors.size();i++)
  83.         ret+=neighbors.get(i).info+" ";
  84.         return ret;
  85.        
  86.     }
  87.  
  88.     @Override
  89.     public boolean equals(Object obj) {
  90.         @SuppressWarnings("unchecked")
  91.         GraphNode<E> pom = (GraphNode<E>)obj;
  92.         return (pom.info.equals(this.info));
  93.     }
  94.  
  95.     public int getIndex() {
  96.         return index;
  97.     }
  98.  
  99.     public void setIndex(int index) {
  100.         this.index = index;
  101.     }
  102.  
  103.     public E getInfo() {
  104.         return info;
  105.     }
  106.  
  107.     public void setInfo(E info) {
  108.         this.info = info;
  109.     }
  110.  
  111.     public LinkedList<GraphNode<E>> getNeighbors() {
  112.         return neighbors;
  113.     }
  114.  
  115.     public void setNeighbors(LinkedList<GraphNode<E>> neighbors) {
  116.         this.neighbors = neighbors;
  117.     }
  118.  
  119.    
  120.    
  121. }
  122.  
  123. class Graph<E> {
  124.  
  125.     int num_nodes;
  126.     GraphNode<E> adjList[];
  127.  
  128.     @SuppressWarnings("unchecked")
  129.     public Graph(int num_nodes, E[] list) {
  130.         this.num_nodes = num_nodes;
  131.         adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  132.         for (int i = 0; i < num_nodes; i++)
  133.             adjList[i] = new GraphNode<E>(i, list[i]);
  134.     }
  135.  
  136.     @SuppressWarnings("unchecked")
  137.     public Graph(int num_nodes) {
  138.         this.num_nodes = num_nodes;
  139.         adjList = (GraphNode<E>[]) new GraphNode[num_nodes];
  140.     }
  141.  
  142.     int adjacent(int x, int y) {
  143.         // proveruva dali ima vrska od jazelot so
  144.         // indeks x do jazelot so indeks y
  145.         return (adjList[x].containsNeighbor(adjList[y])) ? 1 : 0;
  146.     }
  147.  
  148.     void addEdge(int x, int y) {
  149.         // dodava vrska od jazelot so indeks x do jazelot so indeks y
  150.         if (!adjList[x].containsNeighbor(adjList[y])) {
  151.             adjList[x].addNeighbor(adjList[y]);
  152.         }
  153.     }
  154.  
  155.     void deleteEdge(int x, int y) {
  156.         adjList[x].removeNeighbor(adjList[y]);
  157.     }
  158.  
  159.     void dfsSearch(int node) {
  160.         boolean visited[] = new boolean[num_nodes];
  161.         for (int i = 0; i < num_nodes; i++)
  162.             visited[i] = false;
  163.         dfsRecursive(node, visited);
  164.     }
  165.  
  166.     void dfsRecursive(int node, boolean visited[]) {
  167.         visited[node] = true;
  168.         System.out.println(node + ": " + adjList[node].getInfo());
  169.  
  170.         for (int i = 0; i < adjList[node].getNeighbors().size(); i++) {
  171.             GraphNode<E> pom = adjList[node].getNeighbors().get(i);
  172.             if (!visited[pom.getIndex()])
  173.                 dfsRecursive(pom.getIndex(), visited);
  174.         }
  175.     }
  176.  
  177.     void dfsNonrecursive(int node) {
  178.         boolean visited[] = new boolean[num_nodes];
  179.         for (int i = 0; i < num_nodes; i++)
  180.             visited[i] = false;
  181.         visited[node] = true;
  182.         System.out.println(node+": " + adjList[node].getInfo());
  183.         Stack<Integer> s = new Stack<Integer>();
  184.         s.push(node);
  185.  
  186.         GraphNode<E> pom;
  187.  
  188.         while (!s.isEmpty()) {
  189.             pom = adjList[s.peek()];
  190.             GraphNode<E> tmp=null;
  191.             for (int i = 0; i < pom.getNeighbors().size(); i++) {
  192.                 tmp = pom.getNeighbors().get(i);
  193.                 if (!visited[tmp.getIndex()])
  194.                     break;
  195.             }
  196.             if(tmp!=null && !visited[tmp.getIndex()]){
  197.                 visited[tmp.getIndex()] = true;
  198.                 System.out.println(tmp.getIndex() + ": " + tmp.getInfo());
  199.                 s.push(tmp.getIndex());
  200.             }
  201.             else
  202.                 s.pop();
  203.         }
  204.  
  205.     }
  206.        
  207.     @Override
  208.     public String toString() {
  209.         String ret = new String();
  210.         for (int i = 0; i < this.num_nodes; i++)
  211.             ret += i + ": " + adjList[i] + "\n";
  212.         return ret;
  213.     }
  214.  
  215. }
  216.  
  217.  
  218. Sample input
  219.  
  220. 5
  221. Z1
  222. Z2
  223. I1
  224. I2
  225. I3
  226. 3
  227. I1 Z1 Z2
  228. I2 I1
  229. I3 Z2 I2
  230. I2
  231.  
  232. Sample output
  233.  
  234. I3
  235.  
  236.  
  237.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement