Pagini recente » Cod sursa (job #2953409) | Cod sursa (job #3273258) | Cod sursa (job #2371114) | Cod sursa (job #569786) | Cod sursa (job #2588628)
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin ("nfa.in");
ofstream fout("nfa.out");
int n, m, q0;
vector <pair <int, char> > G[1001];
bool viz[1001][1001], f[1001], ok;
char s[1001];
queue <int> Q;
void DFS(int nod, int poz)
{
if(ok) return;
if(poz == strlen(s))
{
ok = f[nod];
return;
}
for(int i = 0; i < G[nod].size(); ++i)
if(G[nod][i].second == s[poz] && !viz[G[nod][i].first][poz])
{
viz[G[nod][i].first][poz] = 1;
DFS(G[nod][i].first, poz+1);
}
}
void subp_b()
{
int q;
fin >> q;
while(q--)
{
fin >> s;
ok = 0;
memset(viz, 0, sizeof(viz));
DFS(q0, 0);
fout << ok << '\n';
}
}
/*void subp_c()
{
Q.push(q0);
while(!Q.empty())
{
int nod = Q.front();
for(int i = 0; i < G[nod].size(); ++i)
// if(G[nod][i])
}
}*/
int main()
{
int k;
fin >> n >> m >> k;
fin >> q0;
for(int i = 1, qf; i <= k; ++i)
{
fin >> qf;
f[qf] = 1;
}
for(int i = 1; i <= m; ++i)
{
int q1, q2;
char c;
fin >> q1 >> q2 >> c;
G[q1].push_back(make_pair(q2, c));
}
subp_b();
// subp_c();
return 0;
}