Advertisement
Mitrezzz

[АПС] Лаб 10: Алгоритми за графови Избор на предмет на факултет

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