-
Notifications
You must be signed in to change notification settings - Fork 3
/
proc_get_route_struct_begin.scs
88 lines (74 loc) · 3.74 KB
/
proc_get_route_struct_begin.scs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Находит начало структуры маршрута _route_struct.
// Наденную вершину возвращает в _route_begin.
proc_get_route_struct_begin
=> nrel_main_idtf:
[Находит начало структуры маршрута _route_struct] (* <- lang_ru;; *);
[Find route begin] (* <- lang_en;; *);
<- scp_program;
-> rrel_key_sc_element: .._process1;;
proc_get_route_struct_begin = [*
.._process1
_<- scp_process;
_-> rrel_1:: rrel_in:: .._route_struct;
_-> rrel_2:: rrel_out:: .._route_begin;
_<= nrel_decomposition_of_action:: .._actions (*
// Начальной считается вершина, в которую нет входящих бинарных дуг.
// Переберем все вершины и проверим их на это свойство.
// Копируем множество вершин структуры маршрута для итерации
_-> rrel_1:: .._proc_get_route_struct_begin_operator1 (*
_<- searchSetStr5;;
_-> rrel_1:: rrel_fixed:: rrel_scp_const:: .._route_struct;;
_-> rrel_2:: rrel_assign:: rrel_pos_const_perm:: rrel_scp_var:: .._arc2;;
_-> rrel_3:: rrel_assign:: rrel_scp_var:: .._el3;;
_-> rrel_4:: rrel_assign:: rrel_pos_const_perm:: rrel_scp_var:: .._arc4;;
_-> rrel_5:: rrel_fixed:: rrel_scp_const:: rrel_vertex;;
_->rrel_set_3:: rrel_assign:: rrel_scp_var:: .._vertexes_set;;
_=> nrel_then:: .._proc_get_route_struct_begin_operator2;;
_=> nrel_else:: .._proc_get_route_struct_begin_operator_return;;
*);;
// Итерация по всем вершинам-посещениям.
_-> .._proc_get_route_struct_begin_operator2 (*
_<- searchElStr3;;
_-> rrel_1:: rrel_fixed:: rrel_scp_var:: .._vertexes_set;;
_-> rrel_2:: rrel_assign:: rrel_pos_const_perm:: rrel_scp_var:: .._arc2;;
_-> rrel_3:: rrel_assign:: rrel_scp_var:: .._vertex;;
_=> nrel_then:: .._proc_get_route_struct_begin_operator3;;
_=> nrel_else:: .._proc_get_route_struct_begin_operator6;;
*);;
_-> .._proc_get_route_struct_begin_operator3 (*
_<- eraseEl;;
_-> rrel_1:: rrel_fixed:: rrel_scp_var:: rrel_erase:: .._arc2;;
_=> nrel_goto:: .._proc_get_route_struct_begin_operator4;;
*);;
// Ориентированный граф структуры маршрута можно рассматривать как
// бинарное ориентированное отношение, которое связывает вершины.
_-> .._proc_get_route_struct_begin_operator4 (*
_<- searchElStr5;;
_-> rrel_1:: rrel_assign:: rrel_scp_var:: .._next_vertex;;
_-> rrel_2:: rrel_assign:: rrel_common:: rrel_scp_var:: .._arc2;;
_-> rrel_3:: rrel_fixed:: rrel_scp_var:: .._vertex;;
_-> rrel_4:: rrel_assign:: rrel_pos_const_perm:: rrel_scp_var:: .._arc4;;
_-> rrel_5:: rrel_fixed:: rrel_scp_const:: rrel_arc;;
// Если в _vertex входит бинарная дуга, то эта вершина не начальная,
// следовательно переходим к следующей вершине.
_=> nrel_then:: .._proc_get_route_struct_begin_operator2;;
// Иначе начальная вершина маршрута найдена.
_=> nrel_else:: .._proc_get_route_struct_begin_operator5;;
*);;
_->.._proc_get_route_struct_begin_operator5 (*
_<-varAssign;;
_-> rrel_1:: rrel_assign:: rrel_scp_var:: .._route_begin;;
_-> rrel_2:: rrel_fixed:: rrel_scp_var:: .._vertex;;
_=>nrel_goto:: .._proc_get_route_struct_begin_operator6;;
*);;
// Очистка памяти.
_-> .._proc_get_route_struct_begin_operator6 (*
_<- eraseEl;;
_-> rrel_1:: rrel_fixed:: rrel_scp_var:: rrel_erase:: .._vertexes_set;;
_=> nrel_goto:: .._proc_get_route_struct_begin_operator_return;;
*);;
_-> .._proc_get_route_struct_begin_operator_return (*
_<- return;;
*);;
*);;
*];;