本文整理汇总了C++中DFA::maxNameOfState方法的典型用法代码示例。如果您正苦于以下问题:C++ DFA::maxNameOfState方法的具体用法?C++ DFA::maxNameOfState怎么用?C++ DFA::maxNameOfState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DFA
的用法示例。
在下文中一共展示了DFA::maxNameOfState方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: unionOfTwoAutomata
void unionOfTwoAutomata(DFA automat1, DFA automat2) {
int newStartState, newFinalStates[automat1.countOfFinalStates
+ automat2.countOfFinalStates];
int maxStateName1 = automat1.maxNameOfState() + 1;
int maxStateName2 = automat2.maxNameOfState() + 1;
std::map<int, std::map<char, int> >::iterator i;
std::map<char, int>::iterator j;
if (maxStateName2 >= maxStateName1) { // променяме автомат2 и извеждаме пъвро автомат1 след това автомат2
automat2.changeAllStatesName(maxStateName2);
newStartState = automat2.maxNameOfState() + 1;
for (i = automat1.table.begin(); i != automat1.table.end(); i++)
for (j = i->second.begin(); j != i->second.end(); j++)
std::cout << "table[" << i->first << "][" << j->first << "]="
<< j->second << std::endl;
for (i = automat2.table.begin(); i != automat2.table.end(); i++)
for (j = i->second.begin(); j != i->second.end(); j++)
std::cout << "table[" << i->first << "][" << j->first << "]="
<< j->second << std::endl;
} else { // променяме автомат1 и извеждаме пъвро автомат2 след това автомат1
automat1.changeAllStatesName(maxStateName1);
newStartState = automat1.maxNameOfState() + 1;
for (i = automat2.table.begin(); i != automat2.table.end(); i++)
for (j = i->second.begin(); j != i->second.end(); j++)
std::cout << "table[" << i->first << "][" << j->first << "]="
<< j->second << std::endl;
for (i = automat1.table.begin(); i != automat1.table.end(); i++)
for (j = i->second.begin(); j != i->second.end(); j++)
std::cout << "table[" << i->first << "][" << j->first << "]="
<< j->second << std::endl;
}
// извеждаме прегодите от новото начално състояния
for (int i = 0; i < automat1.countOfAlphabet; i++) {
if (automat1.transitionFunction(automat1.startState,
automat1.alphabet[i]) != -2) {
std::cout << "table[" << newStartState << "]["
<< automat1.alphabet[i] << "]="
<< automat1.transitionFunction(automat1.startState,
automat1.alphabet[i]) << std::endl;
}
if (automat2.transitionFunction(automat2.startState,
automat2.alphabet[i]) != -2) {
std::cout << "table[" << newStartState << "]["
<< automat2.alphabet[i] << "]="
<< automat2.transitionFunction(automat2.startState,
automat2.alphabet[i]) << std::endl;
}
}
int k = 0;
// вземаме финалните състояния на новия автомат
for (int i = 0; i < automat1.countOfFinalStates; i++)
newFinalStates[k++] = automat1.finalStates[i];
for (int i = 0; i < automat2.countOfFinalStates; i++)
newFinalStates[k++] = automat2.finalStates[i];
// ако поне едно от двете начални състояния на двата автомата е финално, правим и началното на новия автомат финално
if (automat1.isFinalState(automat1.startState)
|| automat2.isFinalState(automat2.startState)) {
newFinalStates[k++] = newStartState;
}
// извеждаме автомата
std::cout << "Start state: " << newStartState << std::endl
<< "Final States: ";
for (int i = 0; i < k; i++)
std::cout << newFinalStates[i] << " ";
}