Crazy

Креирање на граф

Dec 11th, 2017
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.96 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.Stack;
  3.  
  4.  
  5. public class GraphCreate {
  6.     public static void main(String [] args){
  7.  
  8.         Scanner input=new Scanner(System.in);
  9.         int n=input.nextInt();
  10.  
  11.         Graph<Character> g=null;
  12.         for(int i=0;i<=n;i++){
  13.             String []s=input.nextLine().split("\\s+");
  14.             if(s[0].equals("CREATE")){
  15.                 g=new Graph<>(Integer.parseInt(s[1]));
  16.             }
  17.             else if(s[0].equals("ADDEDGE")){
  18.                 g.addEdge(Integer.parseInt(s[1]),Integer.parseInt(s[2]));
  19.             }
  20.             else if(s[0].equals("PRINTMATRIX")){
  21.                 System.out.print(g);
  22.             }
  23.             else if(s[0].equals("PRINTNODE")){
  24.                 System.out.println(g.get_node_value(Integer.parseInt(s[1])));
  25.             }
  26.             else if(s[0].equals("ADJACENT")){
  27.                 if(g.adjacent(Integer.parseInt(s[1]),Integer.parseInt(s[2]))==1){
  28.                     System.out.println("1");
  29.                 }
  30.                 else
  31.                     System.out.println("0");
  32.  
  33.              
  34.             }
  35.             else if(s[0].equals("DELETEEDGE")){
  36.                 g.deleteEdge(Integer.parseInt(s[1]),Integer.parseInt(s[2]));
  37.             }
  38.         }
  39.     }
  40.  
  41.  
  42. }
  43.  
  44.  
  45. class Graph<E> {
  46.  
  47.     int num_nodes; // broj na jazli
  48.     E nodes[];    // informacija vo jazlite - moze i ne mora?
  49.     int adjMat[][];  // matrica na sosednost
  50.  
  51.     @SuppressWarnings("unchecked")
  52.     public Graph(int num_nodes) {
  53.         this.num_nodes = num_nodes;
  54.         nodes = (E[]) new Object[num_nodes];
  55.         adjMat = new int[num_nodes][num_nodes];
  56.  
  57.         for(int i=0;i<this.num_nodes;i++)
  58.             for(int j=0;j<this.num_nodes;j++)
  59.                 adjMat[i][j]=0;
  60.         for(int i=0;i<this.num_nodes;++i){
  61.             Character a=(char)(i+'A');
  62.             nodes[i]= (E)a;
  63.         }
  64.     }
  65.  
  66.  
  67.  
  68.     public Graph(int num_nodes, E[] nodes) {
  69.         this.num_nodes = num_nodes;
  70.         this.nodes = nodes;
  71.         adjMat = new int[num_nodes][num_nodes];
  72.  
  73.         for(int i=0;i<this.num_nodes;i++)
  74.             for(int j=0;j<this.num_nodes;j++)
  75.                 adjMat[i][j]=0;
  76.     }
  77.  
  78.  
  79.  
  80.     int adjacent(int x,int y)
  81.     {  // proveruva dali ima vrska od jazelot so indeks x do jazelot so indeks y
  82.         return (adjMat[x][y]!=0)?1:0;
  83.     }
  84.  
  85.     void addEdge(int x,int y)
  86.     {  // dodava vrska megu jazlite so indeksi x i y
  87.         adjMat[x][y]=1;
  88.         adjMat[y][x]=1;
  89.     }
  90.  
  91.     void deleteEdge(int x,int y)
  92.     {
  93.         // ja brise vrskata megu jazlite so indeksi x i y
  94.         adjMat[x][y]=0;
  95.         adjMat[y][x]=0;
  96.     }
  97.  
  98.     // Moze i ne mora?
  99.     E get_node_value(int x)
  100.     {  // ja vraka informacijata vo jazelot so indeks x
  101.         return nodes[x];
  102.     }
  103.  
  104.     // Moze i ne mora?
  105.     void set_node_value(int x, E a)
  106.     {  // ja postavuva informacijata vo jazelot so indeks na a
  107.         nodes[x]=a;
  108.     }
  109.  
  110.     public int getNum_nodes() {
  111.         return num_nodes;
  112.     }
  113.  
  114.     public void setNum_nodes(int num_nodes) {
  115.         this.num_nodes = num_nodes;
  116.     }
  117.  
  118.     void dfsSearch(int node) {
  119.         boolean visited[] = new boolean[num_nodes];
  120.         for (int i = 0; i < num_nodes; i++)
  121.             visited[i] = false;
  122.         dfsRecursive(node, visited);
  123.     }
  124.  
  125.     void dfsRecursive(int node, boolean visited[]) {
  126.         visited[node] = true;
  127.         System.out.println(node + ": " + nodes[node]);
  128.  
  129.         for (int i = 0; i < this.num_nodes; i++) {
  130.             if(adjacent(node, i)==1){
  131.                 if (!visited[i])
  132.                     dfsRecursive(i, visited);
  133.             }
  134.         }
  135.     }
  136.  
  137.     void dfsNonrecursive(int node) {
  138.         boolean visited[] = new boolean[num_nodes];
  139.         for (int i = 0; i < num_nodes; i++)
  140.             visited[i] = false;
  141.         visited[node] = true;
  142.         System.out.println(node + ": " + nodes[node]);
  143.         Stack<Integer> s = new Stack<Integer>();
  144.         s.push(node);
  145.  
  146.         int pom;
  147.  
  148.         while (!s.isEmpty()) {
  149.             pom = s.peek();
  150.             int pom1 = pom;
  151.             for (int i = 0; i < num_nodes; i++) {
  152.                 if(adjacent(pom,i)==1){
  153.                     pom1 = i;
  154.                     if(!visited[i])
  155.                         break;
  156.                 }
  157.             }
  158.             if(!visited[pom1]){
  159.                 visited[pom1] = true;
  160.                 System.out.println(pom1 + ": " + nodes[pom1]);
  161.                 s.push(pom1);
  162.             }
  163.             else
  164.                 s.pop();
  165.         }
  166.  
  167.     }
  168.  
  169.  
  170.     @Override
  171.     public String toString() {
  172.         String ret="";
  173.        /* for(int i=0;i<num_nodes;i++)
  174.             ret+=nodes[i]+" ";
  175.         ret+="\n";*
  176.         for(int i=0;i<num_nodes;i++){
  177.             ret+=nodes[i]+" ";*/
  178.        for(int i=0;i<num_nodes;i++) {
  179.            for(int j=0;j<num_nodes;j++){
  180.                 ret+=adjMat[i][j]+" ";
  181.                 }
  182.                 ret+="\n";
  183.         }
  184.         return ret;
  185.     }
  186.  
  187.  
  188. }
Add Comment
Please, Sign In to add comment