Skip to content

Commit

Permalink
task-4
Browse files Browse the repository at this point in the history
  • Loading branch information
TreshMom committed Mar 12, 2024
1 parent 978b0ee commit 47cbc3d
Showing 1 changed file with 1 addition and 12 deletions.
13 changes: 1 addition & 12 deletions project/task4.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,26 @@
def reachability_with_constraints(
fa: FiniteAutomaton, constraints_fa: FiniteAutomaton
) -> dict[int, set[int]]:
# Построение разреженной матрицы для графа автомата
num_states = fa.num_states
transitions = fa.transitions
adjacency_matrix = np.zeros((num_states, num_states), dtype=bool)
for state, next_state in transitions:
adjacency_matrix[state, next_state] = True

# Преобразование разреженной матрицы в формат CSR для эффективного доступа к строкам
csr_adjacency_matrix = csr_matrix(adjacency_matrix)

# Словарь для хранения достижимых вершин из каждой стартовой вершины
reachable_states = {}

# Обработка каждой из стартовых вершин
for start_state in range(num_states):
# Используем алгоритм multiple source BFS для нахождения достижимых вершин из текущей стартовой вершины
_, predecessors = breadth_first_order(
csr_adjacency_matrix, i_start=start_state, return_predecessors=True
)

# Стартовая вершина также является достижимой из себя
reachable_set = set([start_state])

# Добавляем предшествующие вершины в множество достижимых вершин
for pred_state, _ in enumerate(predecessors):
if (
pred_state != start_state and predecessors[pred_state] != -9999
): # -9999 обозначает отсутствие пути
if pred_state != start_state and predecessors[pred_state] != -9999:
reachable_set.add(pred_state)

# Добавляем найденное множество достижимых вершин в словарь
reachable_states[start_state] = reachable_set

return reachable_states

0 comments on commit 47cbc3d

Please sign in to comment.