Advertisement
framp

C++(11) Automata

Aug 24th, 2012
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. class Node{
  5. private:
  6.     char value;
  7.     bool epsilon;
  8.     bool end;
  9.     std::vector<Node*> next;
  10.    
  11.    
  12. public:
  13.     Node(char value, std::vector<Node*> next, bool epsilon=false, bool end=false) :
  14.         value(value), next(next), epsilon(epsilon), end(end)
  15.     {};
  16.    
  17.     bool check(std::string input) const{
  18.         std::cout << value << "(" << epsilon << "," << end << "):" << input << "\n";
  19.         if (input.size()==0 || (value!=input[0] && !epsilon))
  20.             return false;
  21.         if (input.size()==1 && !epsilon)
  22.             return end || next.size()==0;
  23.         else
  24.             for (int j=0; j<next.size(); j++)
  25.                 if (next[j]->check(input.substr(!epsilon)))
  26.                     return true;
  27.         return false;
  28.     }
  29.    
  30. };
  31.  
  32. int main(){
  33.     Node * word =
  34.     new Node(' ', {
  35.         new Node('a', {
  36.             new Node('p', {
  37.                 new Node('p', {
  38.                     new Node('l', {
  39.                         new Node('e', {})
  40.                     })
  41.                 }),
  42.                 new Node('p', {
  43.                     new Node('u', {
  44.                         new Node('t', {})
  45.                     }),
  46.                     new Node('l', {
  47.                         new Node('d', {
  48.                             new Node('e', {})
  49.                         })
  50.                     }, false, true)
  51.                 })
  52.             })
  53.         })
  54.     }, true);
  55.     std::cout << word->check("apple") << "\n\n";
  56.     std::cout << word->check("apput") << "\n\n";
  57.     std::cout << word->check("appl") << "\n\n";
  58.     std::cout << word->check("applk") << "\n\n";
  59.     std::cout << word->check("applde") << "\n\n";
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement