Pagini recente » Cod sursa (job #794419) | Cod sursa (job #2197588) | Cod sursa (job #380322) | Cod sursa (job #3277365) | Cod sursa (job #2583166)
class Automat:
def __init__(self, nr_stari, stare_init):
self.nr_stari = nr_stari
self.stare_init = stare_init
self.vecini = [dict([]) for i in range(0, nr_stari)]
self.is_final = [False for i in range(0, nr_stari)]
self.viz = [[] for i in range(0, nr_stari)]
def add_stare_finala(self, stare):
self.is_final[stare] = True
def add_edge(self, x: int, y: int, val: str):
if self.vecini[x].get(val) is None:
self.vecini[x][val] = []
self.vecini[x][val].append(y)
def contains_util(self, nod, cuv) -> bool:
if len(cuv) == 0:
return self.is_final[nod]
if self.viz[nod][len(cuv)-1]:
return False
self.viz[nod][len(cuv) - 1] = True
for vecin in self.vecini[nod].get(cuv[0], []):
if self.contains_util(vecin, cuv[1:]):
return True
return False
def contains(self, cuv: str) -> bool:
for i in range(0, len(self.viz)):
self.viz[i] = [False for j in range(0, len(cuv))]
ret = self.contains_util(self.stare_init, cuv)
for i in range(0, len(self.viz)):
self.viz[i] = []
return ret
class reader:
def __init__(self, filename):
f = open(filename, "r")
self.vars = f.read().split()
self.pos = 0
f.close()
def GetNext(self) -> str:
self.pos += 1
return self.vars[self.pos-1]
cin = reader("nfa.in")
out = open("nfa.out", "w")
n = int(cin.GetNext())
m = int(cin.GetNext())
k = int(cin.GetNext())
s = int(cin.GetNext())
aut = Automat(n+1, s)
for i in range(0, k):
aut.add_stare_finala(int(cin.GetNext()))
for i in range(0, m):
a = int(cin.GetNext())
b = int(cin.GetNext())
c = cin.GetNext()
aut.add_edge(a, b, c)
q = int(cin.GetNext())
for i in range(0, q):
cuv = cin.GetNext()
out.write(str(int(aut.contains(cuv))) + "\n")