Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package minimizare;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.util.Scanner;
- import java.util.Vector;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.LinkedHashSet;
- public class Main {
- private static Vector<Integer> getIntVector(String str)
- {
- Vector<Integer> v = new Vector<Integer>();
- for(int index = 0; index < str.length(); index++)
- {
- if(str.charAt(index) != ' ')
- {
- v.addElement(Character.getNumericValue(str.charAt(index)));
- }
- }
- return v;
- }
- private static Vector<Character> getCharVector(String str)
- {
- Vector<Character> v = new Vector<Character>();
- for(int index = 0; index < str.length(); index++)
- {
- if(str.charAt(index) != ' ')
- {
- v.addElement(str.charAt(index));
- }
- }
- return v;
- }
- private static boolean alfabetCorect(Vector<Character> alfabet)
- {
- for(int i = 0; i < alfabet.size() - 1; i++)
- for(int j = i + 1; j < alfabet.size(); j++)
- if(alfabet.elementAt(i) == alfabet.elementAt(j))
- {
- System.out.println("Vocabularul trebuie sa contina litere distincte.");
- return false;
- }
- return true;
- }
- private static Integer tranzitie(Vector<Tranzitie> tranzitii, Integer stareInitiala, Character simbol)
- {
- for (int i = 0; i < tranzitii.size(); i++)
- {
- if(tranzitii.elementAt(i).getStareInitiala() == stareInitiala && tranzitii.elementAt(i).getSimbol().equals(simbol))
- {
- return tranzitii.elementAt(i).getStareFinala();
- }
- }
- return -1;
- }
- public static void main(String[] args)
- {
- Integer[][] matrice;
- Vector<Integer> stari = new Vector<Integer>();
- Vector<Character> alfabet = new Vector<Character>();
- Vector<Integer> stariFinale = new Vector<Integer>();
- Vector<Tranzitie> tranzitii = new Vector<Tranzitie>();
- Integer numarTranzitii = 0;
- Integer stareInitiala = 0;
- Scanner in = null;
- // Citeste datele din fisier
- try
- {
- in = new Scanner(new FileReader("date"));
- while(in.hasNext())
- {
- stari = getIntVector(in.nextLine());
- System.out.println("Stari: " + stari);
- stareInitiala = in.nextInt();
- in.nextLine();
- System.out.println("Stare initiala: " + stareInitiala);
- alfabet = getCharVector(in.nextLine());
- System.out.println("Alfabetul: " + alfabet);
- if(!alfabetCorect(alfabet))
- {
- break;
- }
- stariFinale = getIntVector(in.nextLine());
- System.out.println("Stari finale: " + stariFinale);
- numarTranzitii = in.nextInt();
- in.nextLine();
- System.out.println("Numar tranztii: " + numarTranzitii);
- Integer i = 0;
- for(i = 0; i < numarTranzitii; i++)
- {
- Tranzitie t = new Tranzitie();
- t.setStareInitiala(in.nextInt());
- t.setSimbol(in.next().charAt(0));
- t.setStareFinala(in.nextInt());
- tranzitii.addElement(t);
- System.out.println(t.getStareInitiala() + " " + t.getSimbol() + " " + t.getStareFinala());
- }
- }
- in.close();
- }
- catch (FileNotFoundException e)
- {
- System.out.println("[Alert] Fisierul cu \"date\" nu a fost gasit!");
- }
- for(int i = 0; i < tranzitii.size(); i++)
- {
- System.out.println(tranzitii.elementAt(i).getStareInitiala() + " " + tranzitii.elementAt(i).getSimbol() + " " + tranzitii.elementAt(i).getStareFinala());
- }
- matrice = new Integer[stari.size()][stari.size()];
- for (int i = 0; i < matrice.length; i++)
- {
- for (int j = 0; j < matrice.length; j++)
- {
- matrice[i][j] = 0;
- }
- }
- for (int i = 0; i < stari.size(); i++)
- {
- for (int j = 0; j < stariFinale.size(); j++)
- {
- matrice[stari.elementAt(i) - 1][stariFinale.elementAt(j) - 1] = 1;
- matrice[stariFinale.elementAt(j) - 1][stari.elementAt(i) - 1] = 1;
- }
- matrice[i][i] = i + 1;
- }
- for (int i = 0; i < matrice.length; i++)
- {
- for (int j = i + 1; j < matrice.length; j++)
- {
- matrice[i][j] = 0;
- }
- }
- Boolean isDone = false;
- Integer t1, t2;
- while(isDone == false)
- {
- isDone = true;
- for (int i = 1; i < matrice.length; i++)
- {
- for (int j = 0; j < i; j++)
- {
- if(matrice[i][j] == 0)
- {
- for(Character c : alfabet)
- {
- t1 = tranzitie(tranzitii, i + 1, c);
- t2 = tranzitie(tranzitii, j + 1, c);
- if(matrice[t1 - 1][t2 - 1] == 1 || matrice[t2 - 1][t1 - 1] == 1)
- {
- matrice[i][j] = 1;
- isDone = false;
- break;
- }
- }
- }
- }
- }
- }
- for (int i = 0; i < matrice.length; i++)
- {
- for (int j = 0; j <= i; j++)
- {
- System.out.print(matrice[i][j] + " ");
- }
- System.out.println("");
- }
- System.out.println("\nStarile echivalente sunt: ");
- for (int i = 0; i < matrice.length; i++)
- {
- for (int j = 0; j < i; j++)
- {
- if(matrice[i][j] == 0)
- {
- System.out.println((i + 1) + " echivalent cu " + (j + 1));
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement