DamSi

Untitled

Dec 13th, 2015
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.12 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.NoSuchElementException;
  6.  
  7. /**
  8.  *
  9.  * @author Damjan
  10.  */
  11. public class GraphCreate {
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
  15.         Graph<Character> graph = new Graph<>(50);
  16.         int N = Integer.parseInt(inp.readLine());
  17.  
  18.         for (int i = 0; i < N; ++i) {
  19.             String input = inp.readLine();
  20.             String[] parts = input.split(" ");
  21.  
  22.             String command = parts[0];
  23.  
  24.             if (command.equalsIgnoreCase("CREATE")) {
  25.                 //CREATE
  26.                 int vertices = Integer.parseInt(parts[1]);
  27.                 graph = new Graph<>(vertices);
  28.  
  29.                 for (int j = 0; j < graph.getNum_nodes(); ++j) {
  30.                     graph.set_node_value(j, (char) ((int) 'A' + j));
  31.                 }
  32.             } else if (command.equalsIgnoreCase("ADDEDGE")) {
  33.                 //ADDEDGE
  34.                 int vertex1 = Integer.parseInt(parts[1]);
  35.                 int vertex2 = Integer.parseInt(parts[2]);
  36.                 graph.addEdge(vertex1, vertex2);
  37.             } else if (command.equalsIgnoreCase("PRINTMATRIX")) {
  38.                 //PRINTMATRIX
  39.                 System.out.print(graph);
  40.             } else if (command.equalsIgnoreCase("PRINTNODE")) {
  41.                 //PRINTNODE
  42.                 int node = Integer.parseInt(parts[1]);
  43.                 System.out.println(graph.get_node_value(node));
  44.             } else if (command.equalsIgnoreCase("ADJACENT")) {
  45.                 //ADJACENT
  46.                 int vertex1 = Integer.parseInt(parts[1]);
  47.                 int vertex2 = Integer.parseInt(parts[2]);
  48.                 System.out.println(graph.adjacent(vertex1, vertex2));
  49.             } else if (command.equalsIgnoreCase("DELETEEDGE")) {
  50.                 //DELETEEDGE
  51.                 int vertex1 = Integer.parseInt(parts[1]);
  52.                 int vertex2 = Integer.parseInt(parts[2]);
  53.                 graph.deleteEdge(vertex1, vertex2);
  54.             }
  55.  
  56.         }
  57.  
  58.         inp.close();
  59.     }
  60.  
  61. }
  62. class Graph<E> {
  63.  
  64.     int num_nodes; // broj na jazli
  65.     E nodes[];    // informacija vo jazlite - moze i ne mora?
  66.     int adjMat[][];  // matrica na sosednost
  67.  
  68.     @SuppressWarnings("unchecked")
  69.     public Graph(int num_nodes) {
  70.         this.num_nodes = num_nodes;
  71.         nodes = (E[]) new Object[num_nodes];
  72.         adjMat = new int[num_nodes][num_nodes];
  73.  
  74.         for (int i = 0; i < this.num_nodes; i++) {
  75.             for (int j = 0; j < this.num_nodes; j++) {
  76.                 adjMat[i][j] = 0;
  77.             }
  78.         }
  79.     }
  80.  
  81.     public Graph(int num_nodes, E[] nodes) {
  82.         this.num_nodes = num_nodes;
  83.         this.nodes = nodes;
  84.         adjMat = new int[num_nodes][num_nodes];
  85.  
  86.         for (int i = 0; i < this.num_nodes; i++) {
  87.             for (int j = 0; j < this.num_nodes; j++) {
  88.                 adjMat[i][j] = 0;
  89.             }
  90.         }
  91.     }
  92.  
  93.     int adjacent(int x, int y) {  // proveruva dali ima vrska od jazelot so indeks x do jazelot so indeks y
  94.         return (adjMat[x][y] != 0) ? 1 : 0;
  95.     }
  96.  
  97.     void addEdge(int x, int y) {  // dodava vrska megu jazlite so indeksi x i y
  98.         adjMat[x][y] = 1;
  99.         adjMat[y][x] = 1;
  100.     }
  101.  
  102.     void deleteEdge(int x, int y) {
  103.         // ja brise vrskata megu jazlite so indeksi x i y
  104.         adjMat[x][y] = 0;
  105.         adjMat[y][x] = 0;
  106.     }
  107.  
  108.     // Moze i ne mora?
  109.     E get_node_value(int x) {  // ja vraka informacijata vo jazelot so indeks x
  110.         return nodes[x];
  111.     }
  112.  
  113.     // Moze i ne mora?
  114.     void set_node_value(int x, E a) {  // ja postavuva informacijata vo jazelot so indeks na a
  115.         nodes[x] = a;
  116.     }
  117.  
  118.     public int getNum_nodes() {
  119.         return num_nodes;
  120.     }
  121.  
  122.     public void setNum_nodes(int num_nodes) {
  123.         this.num_nodes = num_nodes;
  124.     }
  125.  
  126.     void dfsSearch(int node) {
  127.         boolean visited[] = new boolean[num_nodes];
  128.         for (int i = 0; i < num_nodes; i++) {
  129.             visited[i] = false;
  130.         }
  131.         dfsRecursive(node, visited);
  132.     }
  133.  
  134.     void dfsRecursive(int node, boolean visited[]) {
  135.         visited[node] = true;
  136.         System.out.println(node + ": " + nodes[node]);
  137.  
  138.         for (int i = 0; i < this.num_nodes; i++) {
  139.             if (adjacent(node, i) == 1) {
  140.                 if (!visited[i]) {
  141.                     dfsRecursive(i, visited);
  142.                 }
  143.             }
  144.         }
  145.     }
  146.  
  147.     void dfsNonrecursive(int node) {
  148.         boolean visited[] = new boolean[num_nodes];
  149.         for (int i = 0; i < num_nodes; i++) {
  150.             visited[i] = false;
  151.         }
  152.         visited[node] = true;
  153.         System.out.println(node + ": " + nodes[node]);
  154.         Stack<Integer> s = new Stack<Integer>();
  155.         s.push(node);
  156.  
  157.         int pom;
  158.  
  159.         while (!s.isEmpty()) {
  160.             pom = s.peek();
  161.             int pom1 = pom;
  162.             for (int i = 0; i < num_nodes; i++) {
  163.                 if (adjacent(pom, i) == 1) {
  164.                     pom1 = i;
  165.                     if (!visited[i]) {
  166.                         break;
  167.                     }
  168.                 }
  169.             }
  170.             if (!visited[pom1]) {
  171.                 visited[pom1] = true;
  172.                 System.out.println(pom1 + ": " + nodes[pom1]);
  173.                 s.push(pom1);
  174.             } else {
  175.                 s.pop();
  176.             }
  177.         }
  178.  
  179.     }
  180.  
  181.     void bfs(int node) {
  182.         boolean visited[] = new boolean[num_nodes];
  183.         for (int i = 0; i < num_nodes; i++) {
  184.             visited[i] = false;
  185.         }
  186.         visited[node] = true;
  187.         System.out.println(node + ": " + nodes[node]);
  188.         Queue<Integer> q = new LinkedQueue<Integer>();
  189.         q.enqueue(node);
  190.  
  191.         int pom;
  192.  
  193.         while (!q.isEmpty()) {
  194.             pom = q.dequeue();
  195.             for (int i = 0; i < num_nodes; i++) {
  196.                 if (adjacent(pom, i) == 1) {
  197.                     if (!visited[i]) {
  198.                         visited[i] = true;
  199.                         System.out.println(i + ": " + nodes[i]);
  200.                         q.enqueue(i);
  201.                     }
  202.  
  203.                 }
  204.             }
  205.  
  206.         }
  207.  
  208.     }
  209.  
  210.     @Override
  211.     public String toString() {
  212.         //String ret="  ";
  213.         //for(int i=0;i<num_nodes;i++)
  214.         //  ret+=nodes[i]+" ";
  215.         //ret+="\n";
  216.         String ret = "";
  217.         for (int i = 0; i < num_nodes; i++) {
  218.             //ret+=nodes[i]+" ";
  219.             for (int j = 0; j < num_nodes; j++) {
  220.                 ret += adjMat[i][j] + " ";
  221.             }
  222.             ret += "\n";
  223.         }
  224.         return ret;
  225.     }
  226.  
  227. }
  228. class SLLNode<E> {
  229.     protected E element;
  230.     protected SLLNode<E> succ;
  231.  
  232.     public SLLNode(E elem, SLLNode<E> succ) {
  233.         this.element = elem;
  234.         this.succ = succ;
  235.     }
  236.  
  237.     @Override
  238.     public String toString() {
  239.         return element.toString();
  240.     }
  241. }
  242. interface Queue<E> {
  243.  
  244.     // Elementi na redicata se objekti od proizvolen tip.
  245.  
  246.     // Metodi za pristap:
  247.  
  248.     public boolean isEmpty ();
  249.         // Vrakja true ako i samo ako redicata e prazena.
  250.  
  251.     public int size ();
  252.         // Ja vrakja dolzinata na redicata.
  253.  
  254.     public E peek ();
  255.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  256.  
  257.     // Metodi za transformacija:
  258.  
  259.     public void clear ();
  260.         // Ja prazni redicata.
  261.  
  262.     public void enqueue (E x);
  263.         // Go dodava x na kraj od redicata.
  264.  
  265.     public E dequeue ();
  266.         // Go otstranuva i vrakja pochetniot element na redicata.
  267.  
  268. }
  269. class LinkedQueue<E> implements Queue<E> {
  270.  
  271.     // Redicata e pretstavena na sledniot nacin:
  272.     // length go sodrzi brojot na elementi.
  273.     // Elementite se zachuvuvaat vo jazli dod SLL
  274.     // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  275.     SLLNode<E> front, rear;
  276.     int length;
  277.  
  278.     // Konstruktor ...
  279.  
  280.     public LinkedQueue () {
  281.         clear();
  282.     }
  283.  
  284.     public boolean isEmpty () {
  285.         // Vrakja true ako i samo ako redicata e prazena.
  286.         return (length == 0);
  287.     }
  288.  
  289.     public int size () {
  290.         // Ja vrakja dolzinata na redicata.
  291.         return length;
  292.     }
  293.  
  294.     public E peek () {
  295.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  296.         if (front == null)
  297.             throw new NoSuchElementException();
  298.         return front.element;
  299.     }
  300.  
  301.     public void clear () {
  302.         // Ja prazni redicata.
  303.         front = rear = null;
  304.         length = 0;
  305.     }
  306.  
  307.     public void enqueue (E x) {
  308.         // Go dodava x na kraj od redicata.
  309.         SLLNode<E> latest = new SLLNode<E>(x, null);
  310.         if (rear != null) {
  311.             rear.succ = latest;
  312.             rear = latest;
  313.         } else
  314.             front = rear = latest;
  315.         length++;
  316.     }
  317.  
  318.     public E dequeue () {
  319.         // Go otstranuva i vrakja pochetniot element na redicata.
  320.         if (front != null) {
  321.             E frontmost = front.element;
  322.             front = front.succ;
  323.             if (front == null)  rear = null;
  324.             length--;
  325.             return frontmost;
  326.         } else
  327.             throw new NoSuchElementException();
  328.     }
  329.  
  330. }
Advertisement
Add Comment
Please, Sign In to add comment