Я несколько дней пытаюсь смоделировать недетерминированные конечные автоматы, используя карту, в которой я храню переходы состояний, точно так, как указано в этом опубликовать.
Проблема в том, что в них отсутствуют недетерминированные переходы, т.е. те, которые одним и тем же символом приводят меня в разные состояния. Вот мой код:
#include <iostream>
#include <map>
#include <utility>
#include <iterator> // for ostream_iterator
using namespace std;
int main (){
freopen ("testMap.in", "r", stdin);
int testCases;
int i, j;
int stateOrigin, stateDestination;
char transitionCharacter ;
int numberTransitions=8;
typedef map<pair<int, char>, int> transitions;
transitions trans;
for (j=0; j<numberTransitions;j++){
cin>> stateOrigin>>stateDestination>>transitionCharacter;
trans.insert(transitions::value_type(std::make_pair(stateOrigin,transitionCharacter), stateDestination ));
}
map<pair<int, char>, int>::iterator p = trans.begin();
for( p = trans.begin(); p != trans.end(); p++ ){
cout << p->first.first<< " "<<p->first.second<<" "<<p->second<<endl;
}
return 0;
}
Когда я печатаю все содержимое карты, это говорит мне:
0 a 0
1 b 1
1 c 2
3 d 4
4 d 4
и ожидаемый результат:
0 0 a
0 1 a
1 1 b
1 2 c
1 3 c
3 4 d
4 4 d
4 5 d
Что я делаю неправильно. В другом вопросе ответили, что лучший способ смоделировать переходы недетерминированного конечного автомата — это использовать карту, но использование карты уместно в этом типе задач или может быть решено каким-либо образом? Почему эти значения теряются?
Удобно менять структуру карты? то есть:
typedef map<pair<int, int>, char> transitions;
std::map
не допускает дублирования ключей, поэтому у вас не может быть f.ex. ((0,a),0) и ((0,a),1) в нем одновременно. - person jrok   schedule 16.05.2012