exponenta event banner

biconncomp

Двухсвязные компоненты графика

Описание

пример

bins = biconncomp(G) возвращает двояко связанные компоненты графа G как бункеры. Номера ячеек указывают, к какому двухсоединенному компоненту принадлежит каждое ребро в графике. Каждое ребро в G принадлежит одному двухсоединенному компоненту, тогда как узлы в G может принадлежать более чем одному двухсоединенному компоненту. Два узла принадлежат одному и тому же двояко соединенному компоненту, если удаление какого-либо одного узла из графа не разъединяет их.

пример

bins = biconncomp(G,'OutputForm',form), где form является 'cell', возвращает выходные данные в виде массива ячеек, который bins{j} содержит идентификаторы узлов всех узлов в компоненте j. Значение по умолчанию для form является 'vector'.

пример

[bins,iC] = biconncomp(___) дополнительно возвращает индексы узлов iC указывая, какие узлы являются вершинами разреза (также называемые точками сочленения).

Примеры

свернуть все

Создайте и постройте график. Раскрасьте края, исходя из того, к какому двухсоединенному компоненту принадлежит каждое ребро.

s = [1 1 2 2 3 4 4 5 6 6 7 7 8];
t = [2 3 3 4 4 5 7 6 7 10 8 9 9];
G = graph(s,t);
p = plot(G,'LineWidth',2);

Figure contains an axes. The axes contains an object of type graphplot.

p.EdgeCData =  biconncomp(G);

Figure contains an axes. The axes contains an object of type graphplot.

В этом примере показано, как извлечь двухсоединенные компоненты из графа в виде подграфов, а затем маркировать узлы в каждом подграфе с помощью индексов узлов в исходном графе.

Создайте и постройте график.

s = [1 1 2 2 3 4 4 5 6 6 7 7 8];
t = [2 3 3 4 4 5 7 6 7 10 8 9 9];
G = graph(s,t);
plot(G)

Figure contains an axes. The axes contains an object of type graphplot.

Сгруппируйте узлы графика в ячейки на основе того, к какому двухсоединенному компоненту (ам) принадлежит каждый узел. Затем выполните цикл через каждый из бункеров и извлеките подграф для каждого двухсоединенного компонента. Маркировка узлов в каждом подграфе с использованием их исходных индексов узлов.

bincell = biconncomp(G, 'OutputForm', 'cell');
n = length(bincell);

for ii = 1:n
    subplot(2,2,ii)
    plot(subgraph(G, bincell{ii}), 'NodeLabel', bincell{ii});
end

Figure contains 4 axes. Axes 1 contains an object of type graphplot. Axes 2 contains an object of type graphplot. Axes 3 contains an object of type graphplot. Axes 4 contains an object of type graphplot.

Определите вершины выреза на графике, а затем выделите эти вершины на графике.

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

s = [1 1 2 2 3 4 4 5 6 6 7 7 8];
t = [2 3 3 4 4 5 7 6 7 10 8 9 9];
G = graph(s,t);
p = plot(G);

Figure contains an axes. The axes contains an object of type graphplot.

[edgebins,iC] = biconncomp(G)
edgebins = 1×13

     4     4     4     4     4     3     3     3     3     2     1     1     1

iC = 1×3

     4     6     7

Узлы 4, 6 и 7 являются секущими вершинами графа G. Использовать highlight для увеличения вершин реза, на которые ссылается iC.

highlight(p, iC)

Figure contains an axes. The axes contains an object of type graphplot.

Входные аргументы

свернуть все

Входной график, заданный как graph объект. Использовать graph для создания неориентированного объекта графика.

Пример: G = graph(1,2)

Тип вывода, указанный как одно из следующих значений:

ВыборПродукция
'vector' (по умолчанию)bins - числовой вектор, указывающий, какому из двух соединенных компонентов принадлежит каждое ребро.
'cell'bins является массивом ячеек, и bins{j} содержит идентификаторы узлов для всех узлов, принадлежащих компоненту j.

Выходные аргументы

свернуть все

Двухсоединенные компоненты, возвращаемые в виде вектора или массива ячеек. Номера ячеек присваивают каждое ребро или узел в графике двухсоединенному компоненту:

  • Если OutputForm является 'vector' (по умолчанию), то bins - числовой вектор, указывающий, какому соединенному компоненту (bin) принадлежит каждое ребро. Ребра, являющиеся контурами, назначаются ячейке 0, поскольку они не относятся ни к одному двухсоединенному компоненту.

  • Если OutputForm является 'cell', то bins является массивом ячеек, с bins{j} содержит идентификаторы узлов для всех узлов, принадлежащих компоненту j.

Индексы вершин разреза, возвращаемые как вектор числовых идентификаторов узлов.

Подробнее

свернуть все

Двухсоединенные компоненты

Двояко соединённая составляющая графа является максимально двояко соединённой подграфом. Граф имеет двоякую связь, если он не содержит вершин разреза.

Разложение графа на его двояко связанные компоненты помогает измерить, насколько хорошо связан граф. Можно разложить любой связный граф на дерево двояко связанных компонентов, называемое деревом выреза блоков. Блоки в дереве прикрепляются в общих вершинах, которые являются вершинами выреза.

На иллюстрации изображены:

  • (а) Неориентированный граф с 11 узлами.

  • (b) Пять двухсвязных компонентов графа, с секущими вершинами исходного графа, окрашенными для каждого компонента, к которому они принадлежат.

  • (c) Дерево блока-выреза графа, которое содержит узел для каждого двухсвязного компонента (как большие окружности) и узел для каждой вершины выреза (как меньшие разноцветные окружности). В дереве выреза блока каждая вершина выреза соединяется с каждым компонентом, которому она принадлежит.

Вырезать вершины

Также известные как точки сочленения, вершины реза - это узлы графа, удаление которых увеличивает число связанных компонентов. На предыдущей иллюстрации вершины выреза представляют собой узлы с несколькими цветами: узлы 4, 6 и 7.

Представлен в R2016b