Создание рекурсии, которая образует цепочку, пока новый элемент не может быть добавлен - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть матрица 9x2, где первый столбец подразумевает второй столбец, то есть

A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];

Я сформирую цепочку импликации, используя эти данные.Примером пары будет 3 -> 1 -> 7 -> 10 -> 8 или 3 -> 1 -> 7 -> 10 -> 4 или 2 -> 8 -> 6 --> 9

Я пытался использовать ячейку для каждого правила, но не смог сформировать цикл while.Размер ячейки меняется с каждым новым элементом, но, например, я не мог перейти от 3 -> 1 -> 7 -> 10 к двум отдельным цепочкам из 3 -> 1 -> 7 -> 10 --> 8 и 3 -> 1 -> 7 -> 10 -> 4. Как я могу это сделать?

1 Ответ

0 голосов
/ 19 ноября 2018

Один из вариантов - преобразовать это в ориентированный граф. Вы можете идентифицировать исходный и приемный узлы по тем, которые встречаются только в первом или втором столбце A. Затем вы можете перебрать все возможные пути от каждого источника до каждого приемного узла, используя кратчайший путь.

A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2));      % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
  for j = 1:length(sink)
    disp(shortestpath(G, source(i), sink(j))); 
  end
end

выход:

 2     8     6     9

 3     1     7    10     4

 3     1     7    10     8     6     9
...