Cod sursa(job #2627863)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 12 iunie 2020 22:41:38
Problema NFA Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

#define input "nfa.in"
#define output "nfa.out"
#define NMAX 305

using namespace std;

ifstream in(input);
ofstream out(output);

struct muchie
{
    int y, c;
};
vector < muchie > muchii[NMAX];
string mesaj;
int N, M, K, Q, BG, ND[NMAX];
bool ans = false;

void DFS(int nod, int n, string text)
{
    if(ans) return;
    for(unsigned i = 0; i < muchii[nod].size(); i++)
    {
        int new_nod = muchii[nod][i].y, val = muchii[nod][i].c;
        if(text.size() < mesaj.size())
        {
                if(val == (int)mesaj[n])
                {
                    text.push_back(val);
                    if(text.size() == mesaj.size() && ND[new_nod] == 1)
                    {
                        if(text == mesaj) ans = true;
                    }
                    else 
                    {
                        DFS(new_nod, n + 1, text);
                    }
                    text.pop_back();
                }
        }
    }
}

void Solve()
{
    ans = false;
    string t;
    DFS(BG, 0, t);
    out << ans << "\n";
}

void Read_Data()
{
    in >> N >> M >> K;
    in >> BG;
    for(int i = 1; i <= K; i++)
    {
        int x; in >> x;
        ND[x] = 1;
    }
    for(int i = 1; i <= M; i++)
    {
        int x, y; char c; in >> x >> y >> c;
        muchii[x].push_back({y, c});
    }
    in >> Q;
    while(Q--)
    {
        in >> mesaj;
        Solve();
    }
}

int main()
{
    Read_Data();
    out.close();
    return 0;
}