この投稿に示されているように、状態遷移を格納しているマップを使用して、非決定性有限オートマトンをシミュレートするために数日間試みています。
問題は、非決定論的な遷移、つまり同じシンボルによって私を異なる状態に導く遷移が欠落していることです。これが私のコードです:
#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;