Pagini recente » Cod sursa (job #805429) | Cod sursa (job #2202343) | Istoria paginii runda/4226 | Cod sursa (job #1029631) | Cod sursa (job #3216963)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_set>
#include <queue>
std::vector<std::vector<std::pair<int, int>>>graf;
std::unordered_set<int>stariFinale;
int stareInitiala;
bool ok;
void isWordAccepted(const std::string &word, const int start, const int posInWord) {
if(posInWord == word.length()) {
if(stariFinale.find(start) != stariFinale.end()) {
ok = 1;
}
}
else {
for(int i = 0; i < graf[start].size(); i++) {
if(graf[start][i].second == word[posInWord]) {
isWordAccepted(word, graf[start][i].first, posInWord + 1);
}
}
}
}
int main() {
std::ifstream fin("nfa.in");
std::ofstream fout("nfa.out");
int nrStari, nrTranzitii, nrStariFinale;
fin>>nrStari>>nrTranzitii>>nrStariFinale;
fin>>stareInitiala;
graf.resize(nrStari + 1);
for(int i = 0; i < nrStariFinale; i++) {
int stareFinala;
fin>>stareFinala;
stariFinale.insert(stareFinala);
}
for(int i = 0; i < nrTranzitii; i++) {
int x, y;
char l;
fin>>x>>y>>l;
graf[x].emplace_back(y, l);
}
int nrCuvinte;
fin>>nrCuvinte;
for(int i = 0; i < nrCuvinte; i++) {
std::string cuvant;
fin>>cuvant;
ok = 0;
isWordAccepted(cuvant, stareInitiala, 0);
fout << ok << '\n';
}
fin.close();
fout.close();
return 0;
}