Pagini recente » Cod sursa (job #1187556) | Cod sursa (job #2713614) | Cod sursa (job #3290932) | Rating UAIC Ciobanu Gotca Lungu (UAIC_Ciobanu_Gotca_Lungu) | Cod sursa (job #2591245)
#include <iostream>
#include <fstream>
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;
string cuv;
bool stari_finale[NMAX],use[NMAX];
int tranzitii[NMAX][SIGMA][NMAX];
bool nfa()
{
int current[NMAX];
int sz_current=0;
current[++sz_current]=start;
int sz=cuv.size();
for(int i=0;i<sz;i++)
{
int next[NMAX];
int sz_next=0;
int lit=cuv[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--)
{
f>>cuv;
g<<nfa()<<"\n";
}
return 0;
}