Pagini recente » Cod sursa (job #1429729) | Cod sursa (job #142897) | Cod sursa (job #1861821) | Cod sursa (job #885862) | Cod sursa (job #2591220)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nfa.in");
ofstream g("nfa.out");
const int SIGMA=26;
const int NMAX=300;
const int LGMAX=200;
int start;
char c;
bool stari_finale[NMAX+1];
vector <int> tranzitii[NMAX+1][SIGMA];
bool incoada[NMAX+1][LGMAX+1];
bool nfa(string s)
{
for(int i=1;i<=NMAX;i++)
{
for(int j=1;j<=LGMAX;j++)
incoada[i][j]=0;
}
queue < pair<int,int> > coada;
int sz=s.size();
coada.push({start,0});
incoada[start][0]=1;
while(!coada.empty())
{
int x=coada.front().first;
int d=coada.front().second;
if(d==sz && stari_finale[x])
return 1;
incoada[x][d]=0;
coada.pop();
int lit=s[d]-'a';
for(unsigned int i=0;i<tranzitii[x][lit].size();i++)
{
int nod=tranzitii[x][lit][i];
if(!incoada[nod][d+1])
{
coada.push({nod,d+1});
incoada[nod][d+1]=1;
}
}
}
return 0;
}
int main()
{
int x,y,k,n,m,q;
f>>n>>m>>k;
f>>start;
for(int i=1;i<=k;i++)
{
f>>x;
stari_finale[x]=1;
}
while(m--)
{
f>>x>>y>>c;
tranzitii[x][c-'a'].push_back(y);
}
f>>q;
while(q--)
{
string cuv;
f>>cuv;
g<<nfa(cuv)<<"\n";
}
return 0;
}