Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.97 KB | None | 0 0
  1. package minimizare;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.util.Scanner;
  6. import java.util.Vector;
  7. import java.util.HashSet;
  8. import java.util.Iterator;
  9. import java.util.LinkedHashSet;
  10.  
  11. public class Main {
  12.     private static Vector<Integer> getIntVector(String str)
  13.     {
  14.         Vector<Integer> v = new Vector<Integer>();
  15.        
  16.         for(int index = 0; index < str.length(); index++)
  17.         {
  18.             if(str.charAt(index) != ' ')
  19.             {
  20.                 v.addElement(Character.getNumericValue(str.charAt(index)));
  21.             }
  22.         }
  23.        
  24.         return v;
  25.     }
  26.    
  27.     private static Vector<Character> getCharVector(String str)
  28.     {
  29.         Vector<Character> v = new Vector<Character>();
  30.        
  31.         for(int index = 0; index < str.length(); index++)
  32.         {
  33.             if(str.charAt(index) != ' ')
  34.             {
  35.                 v.addElement(str.charAt(index));
  36.             }
  37.         }
  38.        
  39.         return v;
  40.     }
  41.    
  42.     private static boolean alfabetCorect(Vector<Character> alfabet)
  43.     {
  44.         for(int i = 0; i < alfabet.size() - 1; i++)
  45.             for(int j = i + 1; j < alfabet.size(); j++)
  46.                 if(alfabet.elementAt(i) == alfabet.elementAt(j))
  47.                 {
  48.                     System.out.println("Vocabularul trebuie sa contina litere distincte.");
  49.                     return false;
  50.                 }
  51.         return true;
  52.     }
  53.    
  54.     private static Integer tranzitie(Vector<Tranzitie> tranzitii, Integer stareInitiala, Character simbol)
  55.     {
  56.         for (int i = 0; i < tranzitii.size(); i++)
  57.         {
  58.             if(tranzitii.elementAt(i).getStareInitiala() == stareInitiala && tranzitii.elementAt(i).getSimbol().equals(simbol))
  59.             {
  60.                 return tranzitii.elementAt(i).getStareFinala();
  61.             }
  62.         }
  63.         return -1;
  64.     }
  65.    
  66.     public static void main(String[] args)
  67.     {
  68.         Integer[][] matrice;
  69.        
  70.         Vector<Integer> stari = new Vector<Integer>();
  71.         Vector<Character> alfabet = new Vector<Character>();
  72.         Vector<Integer> stariFinale = new Vector<Integer>();
  73.         Vector<Tranzitie> tranzitii = new Vector<Tranzitie>();
  74.         Integer numarTranzitii = 0;
  75.         Integer stareInitiala = 0;
  76.        
  77.         Scanner in = null;
  78.        
  79.         // Citeste datele din fisier
  80.         try
  81.         {
  82.             in = new Scanner(new FileReader("date"));
  83.            
  84.             while(in.hasNext())
  85.             {
  86.                 stari = getIntVector(in.nextLine());
  87.                 System.out.println("Stari: " + stari);
  88.                
  89.                 stareInitiala = in.nextInt();
  90.                 in.nextLine();
  91.                 System.out.println("Stare initiala: " + stareInitiala);
  92.                
  93.                 alfabet = getCharVector(in.nextLine());
  94.                 System.out.println("Alfabetul: " + alfabet);
  95.                
  96.                 if(!alfabetCorect(alfabet))
  97.                 {
  98.                     break;
  99.                 }
  100.                
  101.                 stariFinale = getIntVector(in.nextLine());
  102.                 System.out.println("Stari finale: " + stariFinale);
  103.                
  104.                 numarTranzitii = in.nextInt();
  105.                 in.nextLine();
  106.                 System.out.println("Numar tranztii: " + numarTranzitii);
  107.                
  108.                 Integer i = 0;
  109.                 for(i = 0; i < numarTranzitii; i++)
  110.                 {
  111.                     Tranzitie t = new Tranzitie();
  112.                     t.setStareInitiala(in.nextInt());
  113.                     t.setSimbol(in.next().charAt(0));
  114.                     t.setStareFinala(in.nextInt());
  115.                     tranzitii.addElement(t);
  116.                     System.out.println(t.getStareInitiala() + " " + t.getSimbol() + " " + t.getStareFinala());
  117.                 }
  118.             }
  119.        
  120.             in.close();
  121.         }
  122.         catch (FileNotFoundException e)
  123.         {
  124.             System.out.println("[Alert] Fisierul cu \"date\" nu a fost gasit!");
  125.         }
  126.        
  127.         for(int i = 0; i < tranzitii.size(); i++)
  128.         {
  129.             System.out.println(tranzitii.elementAt(i).getStareInitiala() + " " + tranzitii.elementAt(i).getSimbol() + " " + tranzitii.elementAt(i).getStareFinala());
  130.         }
  131.        
  132.         matrice = new Integer[stari.size()][stari.size()];
  133.        
  134.         for (int i = 0; i < matrice.length; i++)
  135.         {
  136.             for (int j = 0; j < matrice.length; j++)
  137.             {
  138.                 matrice[i][j] = 0;
  139.             }
  140.         }
  141.        
  142.         for (int i = 0; i < stari.size(); i++)
  143.         {
  144.             for (int j = 0; j < stariFinale.size(); j++)
  145.             {
  146.                 matrice[stari.elementAt(i) - 1][stariFinale.elementAt(j) - 1] = 1;
  147.                 matrice[stariFinale.elementAt(j) - 1][stari.elementAt(i) - 1] = 1;
  148.             }
  149.             matrice[i][i] = i + 1;
  150.         }
  151.        
  152.         for (int i = 0; i < matrice.length; i++)
  153.         {
  154.             for (int j = i + 1; j < matrice.length; j++)
  155.             {
  156.                 matrice[i][j] = 0;
  157.             }
  158.         }
  159.        
  160.         Boolean isDone = false;
  161.         Integer t1, t2;
  162.        
  163.         while(isDone == false)
  164.         {
  165.             isDone = true;
  166.             for (int i = 1; i < matrice.length; i++)
  167.             {
  168.                 for (int j = 0; j < i; j++)
  169.                 {
  170.                     if(matrice[i][j] == 0)
  171.                     {
  172.                         for(Character c : alfabet)
  173.                         {
  174.                             t1 = tranzitie(tranzitii, i + 1, c);
  175.                             t2 = tranzitie(tranzitii, j + 1, c);
  176.                            
  177.                             if(matrice[t1 - 1][t2 - 1] == 1 || matrice[t2 - 1][t1 - 1] == 1)
  178.                             {
  179.                                 matrice[i][j] = 1;
  180.                                 isDone = false;
  181.                                 break;
  182.                             }
  183.                         }
  184.                     }
  185.                 }
  186.             }
  187.         }
  188.        
  189.         for (int i = 0; i < matrice.length; i++)
  190.         {
  191.             for (int j = 0; j <= i; j++)
  192.             {
  193.                 System.out.print(matrice[i][j] + " ");
  194.             }
  195.             System.out.println("");
  196.         }
  197.        
  198.         System.out.println("\nStarile echivalente sunt: ");
  199.         for (int i = 0; i < matrice.length; i++)
  200.         {
  201.             for (int j = 0; j < i; j++)
  202.             {
  203.                 if(matrice[i][j] == 0)
  204.                 {
  205.                     System.out.println((i + 1) + " echivalent cu " + (j + 1)); 
  206.                 }
  207.             }
  208.         }
  209.     }
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement