我尝试了几天来模拟一个非确定性有限自动机,使用我存储状态转换的地图,正如这篇文章中所指出的那样。
问题是它们缺少非确定性转换,即那些用相同符号引导我进入不同状态的转换。这是我的代码:
#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
我究竟做错了什么。在另一个问题中,回答说模拟非确定性有限自动机转换的最佳方法是使用映射,但使用映射适合此类问题还是可以以任何方式解决?为什么这些值会丢失?
更改地图结构是否方便?IE:
typedef map<pair<int, int>, char> transitions;