Cod sursa(job #2891339)

Utilizator RobertuRobert Udrea Robertu Data 18 aprilie 2022 11:41:22
Problema NFA Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#define dim 1500
using namespace std;

ifstream fin("nfa.in");
ofstream fout("nfa.out");

int stariFin[dim], fr[dim];

struct Muchie {
    int vecin;
    char lit;
};
vector< vector< pair<int, int> > > v(dim);

int n, ok;

void Verificare(string cuvant, int start, int index) {
    fr[start] = 1;

    if(cuvant.length() == index) {
            if( stariFin[start] ) {
                ok = 1;
                return;
            }
        }

    else { 
        for(int i = 0; i < v[start].size(); i++) 
            if( v[start][i].second == cuvant[index] && !fr[v[start][i].first] ) 
                Verificare(cuvant, v[start][i].first, index + 1);
    }
}

int main() {
    int m, x, y, S, nrF, nrCuv;
    char l;
    int stare;
    string cuvant;

    fin >> n >> m >> nrF >> S;

    for(int i = 0; i < nrF; i++) {
        fin >> stare;
        stariFin[stare] = 1;
    }

    // Muchie tranzitie;
    for(int i = 0; i < m; i++) {
        fin >> x >> y >> l;

        // tranzitie.vecin = y;
        // tranzitie.lit = l;

        v[x].push_back(make_pair(y, l));
    }

    fin >> nrCuv;
    for(int i = 0; i < nrCuv; i++) {
        fin >> cuvant;
        ok = 0;
        fr = {0};
        Verificare(cuvant, S, 0);
        fout << ok << '\n';
    }

    return 0;
}