Pagini recente » Cod sursa (job #1056799) | Cod sursa (job #1250427) | Cod sursa (job #2541772) | Cod sursa (job #2105548) | Cod sursa (job #2591242)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nfa.in");
ofstream g("nfa.out");
const int SIGMA=26;
const int NMAX=305;
const int LGMAX=155;
int n,k,x,y,m,start,q,sz;
char c,cuv[LGMAX];
bool stari_finale[NMAX],sol,use[NMAX][LGMAX];
int tranzitii[NMAX][SIGMA][NMAX];
void dfs(int nod,int pos)
{
//cout<<nod<<" "<<pos<<"\n";
if(sol)
return;
if(pos==sz && stari_finale[nod])
{
sol=1;
return;
}
if(pos==sz)
return;
use[nod][pos]=1;
int lit=cuv[pos]-'a';
for(int i=1;i<=tranzitii[nod][lit][0];i++)
{
int next=tranzitii[nod][lit][i];
if(!use[next][pos+1])
dfs(next,pos+1);
}
}
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;
sz=strlen(cuv);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=sz;j++)
use[i][j]=0;
}
sol=0;
dfs(start,0);
g<<sol<<"\n";
}
return 0;
}