(* =============================================================================== Project : PLC_Library Device : - Path : Иное Name : DFS Type : PROGRAM =============================================================================== *) PROGRAM DFS (* Алгоритм поиска в глубину *) (* Копировать в свою программу *) VAR_INPUT graph: POINTER TO ARRAY[1..n, 1..n] OF BOOL; // Граф связности (редактируется извне программы через DFS.graph[i,j]) connected: POINTER TO ARRAY[1..n] OF INT; //подключенные вершины Start: INT := 1; // Вершина из которой начинается поиск END_VAR VAR STACK: STACK_I16; v: INT; i: INT; visited: ARRAY[1..n] OF BOOL; // посещенные вершины k: INT := 1; // номер посещенной вершины END_VAR VAR CONSTANT n : INT := 12; // Количество вершин графа END_VAR (*----- IMPLEMENTATION -----*) FOR i:=1 TO n DO visited[i]:=0; connected^[i]:=0; END_FOR k:=1; STACK(Din:= Start, PUSH:= 1); visited[Start]:= 1; WHILE NOT STACK.EMPTY DO STACK(pop:= 1, Dout=>v); FOR i:=1 TO n DO IF (graph^[v,i] AND NOT(visited[i])) THEN visited[i]:= 1; STACK(Din:= i, PUSH:= 1); connected^[k]:=i;k:=k+1; END_IF END_FOR END_WHILE END_PROGRAM