Advertisement
fensa08

#APS Lab 1/9

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