Pagini recente » Cod sursa (job #1195826) | Cod sursa (job #444907) | Cod sursa (job #2520029) | Cod sursa (job #931318) | Cod sursa (job #2588432)
#include <fstream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
ifstream in ("nfa.in");
ofstream out ("nfa.out");
int stare_finala[301];
struct vecin
{
int nrnod;
char valmuchie;
vecin(int _nrnod, char _valmuchie)
{
nrnod = _nrnod;
valmuchie = _valmuchie;
}
};
struct el_coada
{
int nrnod;
int parcurs;
el_coada (int _nrnod, int _parcurs)
{
nrnod = _nrnod;
parcurs = _parcurs;
}
};
queue <el_coada> q;
int main()
{
int N, M, K, x, i, q1, q2, Q, S;
char c;
string cuvant;
in >> N >> M >> K >> S;
for (i=0; i<K; i++)
{
in>>x;
stare_finala[x]=1;
}
vector <vecin> liste_vecini[N+1];
for (i=0; i<M; i++)
{
in>>q1>>q2>>c;
liste_vecini[q1].push_back({q2, c});
}
in >> Q;
for (i=0; i<Q; i++)
{
in>>cuvant;
int lungime {static_cast<int>(cuvant.length())};
int acceptat = 0, nodcurent, parcurs;
q.push({S, 0});
while (q.empty() == 0)
{
nodcurent = q.front().nrnod;
parcurs = q.front().parcurs;
if (parcurs == lungime)
{
if (stare_finala[nodcurent]==1)
{
acceptat = 1;
break;
}
}
else
{
for (vecin x : liste_vecini[nodcurent])
{
if (x.valmuchie == cuvant[parcurs])
{
q.push({x.nrnod, parcurs + 1});
}
}
}
q.pop();
}
out<<acceptat<<"\n";
}
return 0;
}