Pagini recente » Cod sursa (job #1318000) | Cod sursa (job #2931909) | Cod sursa (job #1566878) | Cod sursa (job #1026315) | Cod sursa (job #2591226)
#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];
vector <int> tranzitii[NMAX][SIGMA];
bool nfa(string s)
{
//for(int i=1;i<=n;i++)
//use[i]=0;
vector <int> current;
current.push_back(start);
for(unsigned int i=0;i<s.size();i++)
{
vector <int> next;
int lit=s[i]-'a';
for(unsigned int j=0;j<current.size();j++)
{
for(unsigned int k=0;k<tranzitii[current[j]][lit].size();k++)
{
if(!use[tranzitii[current[j]][lit][k]])
{
next.push_back(tranzitii[current[j]][lit][k]);
use[tranzitii[current[j]][lit][k]]=1;
}
}
}
for(unsigned int j=0;j<next.size();j++)
use[next[j]]=0;
current=next;
}
for(unsigned int i=0;i<current.size();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;
tranzitii[x][c-'a'].push_back(y);
}
f>>q;
while(q--)
{
string cuv;
f>>cuv;
g<<nfa(cuv)<<"\n";
}
return 0;
}