您刚刚看到与NFA相关的问题与DFA
问题:给出金字塔中的叶节点列表,以及指示给定左右节点的可能父节点是什么的映射。如果叶节点之一可以变为根节点,则返回true,否则返回false。
示例:
root
/ \
X X
/\ /\
X X X
/ \/ \/ \
A B C D
地图:
left: A | B | C | D
right---------------------------------
A B |A or C| D | A
B D |B or C| A |
C B
D
注:1。如果左子项为B,则右子项为A,父节点可以为B或C
答案 0 :(得分:0)
def generate_status(all_status, matrix):
# print all_status
if len(all_status) == 1:
return all_status[0]
next_all_status = []
for i in xrange(len(all_status) - 1):
cur_status = set()
for first_status in all_status:
for second_status in all_status[i+1]:
cur_status |= set(list(matrix[first_status][second_status]))
next_all_status.append(cur_status)
return generate_status(next_all_status, matrix)
def is_legal_status(expression, status, matrix):
all_status = [set(s) for s in expression]
return status in generate_status(all_status, matrix)