Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.List;
- import java.util.ArrayList;
- public class DFA
- {
- private int currentState;
- private int maxCount;
- private final int stateCount;
- private final int startState;
- private ArrayList<Integer> acceptedStates = new ArrayList<>();
- private ArrayList<Transition> transitions = new ArrayList<>();
- private ArrayList<String> acceptedStrings = new ArrayList<>();
- public DFA(int stateCount, int startState)
- {
- this.stateCount = stateCount;
- this.startState = startState;
- currentState = startState;
- }
- public void setAccepting(int state)
- {
- acceptedStates.add(state);
- }
- public void addTransition(int from, int to, char c)
- {
- transitions.add(new Transition(from,to,c));
- }
- public List<String> getAcceptingStrings(int maxCount)
- {
- this.maxCount = maxCount;
- work(currentState, currentState, "", false);
- work(currentState, currentState, "", true);
- return acceptedStrings;
- }
- private void work(int currentState, int previousState, String word, boolean cycle)
- {
- if(acceptedStrings.size() >= maxCount)
- return;
- for(int a = 0; a < acceptedStates.size(); a++)
- {
- if(currentState == acceptedStates.get(a) && word != "" && !duplicate(word))
- {
- acceptedStrings.add(word);
- break;
- }
- }
- for(int a = 0; a < transitions.size() && acceptedStrings.size() < maxCount; a++)
- {
- Transition transition = transitions.get(a);
- if(currentState == transition.from)
- {
- if(transition.from == transition.to && !cycle) continue;
- word += transition.c;
- transition.visited = true;
- work(transition.to, transition.from, word, false);
- work(transition.to, transition.from, word, true);
- transition.visited = false;
- }
- }
- }
- private boolean duplicate(String s)
- {
- for(int a = 0; a < acceptedStrings.size(); a++)
- {
- if(acceptedStrings.get(a).compareTo(s) == 0)
- {
- return true;
- }
- }
- return false;
- }
- }
- class Transition
- {
- int from;
- int to;
- char c;
- boolean visited;
- Transition(int from, int to, char c)
- {
- this.from = from;
- this.to = to;
- this.c = c;
- visited = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment