Pagini recente » Cod sursa (job #2922373) | Cod sursa (job #2591229)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nfa.in");
ofstream g("nfa.out");
const int SIGMA=26;
const int NMAX=305;
int n,k,x,y,m,start,q;
char c;
bool stari_finale[NMAX],use[NMAX];
int tranzitii[NMAX][SIGMA][NMAX];
bool nfa(string s)
{
int current[NMAX];
int sz_current=0;
current[++sz_current]=start;
for(unsigned int i=0;i<s.size();i++)
{
int next[NMAX];
int sz_next=0;
int lit=s[i]-'a';
for(int j=1;j<=sz_current;j++)
{
for(int k=1;k<=tranzitii[current[j]][lit][0];k++)
{
if(!use[tranzitii[current[j]][lit][k]])
{
next[++sz_next]=tranzitii[current[j]][lit][k];
use[tranzitii[current[j]][lit][k]]=1;
}
}
}
sz_current=0;
for(int j=1;j<=sz_next;j++)
{
use[next[j]]=0;
current[++sz_current]=next[j];
}
}
for(int i=1;i<=sz_current;i++)
{
if(stari_finale[current[i]])
return 1;
}
return 0;
}
int main()
{
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;
int lit=c-'a';
tranzitii[x][lit][++tranzitii[x][lit][0]]=y;
}
f>>q;
while(q--)
{
string cuv;
f>>cuv;
g<<nfa(cuv)<<"\n";
}
return 0;
}