function VERTEXES=buildMSTTree_getVInfo(IM,vMax,iMax)
% funtion VERTEXES=buildMSTTree_getVInfo(iMax,vMax)
% Побудова матриці VERTEXES з детальною інформацією про вузли
% згідно з константами індексів
% Вхід:
%    IM   - матриця інцидентностей графа
%    iMax - індекс вершини з max кількістю синів (корінь дерева)
%    vMax - кількість синів
% Вихід:
%    VERTEXES - матриця з інформацією про вузли

% визначаємо кількість вузлів (розмір матриці)
[n,n]=size(IM);
% створюємо константи, що знадобляться при роботі програми
INDEX=1; LEVEL=2; SONS=3; PARENT=4; VALUE=5; DEPTH=6;
% створюємо матрицю, де буде міститись інформація про ненульові значення матриці
% інцидентностей (це і є вузли дерева)
% кількість стовпчиків матриці рівна кількості вузлів -1
VERTEXES=zeros(6,n);
% візьмемо перший номер рядка з найбільшою кількістю зв'язків. Запишемо дані
VERTEXES(INDEX,1)=iMax; VERTEXES(LEVEL,1)=1; VERTEXES(SONS,1)=vMax;
VERTEXES(PARENT,1)=0; VERTEXES(VALUE)=0;
% знаходимо синів нульового вузла
[vSons,iSons]=find(IM(VERTEXES(INDEX,1),:)~=0);
% зберігаємо у матриці VERTEXES
VERTEXES(INDEX,2:vMax+1)=iSons;
VERTEXES(LEVEL,2:vMax+1)=2;
VERTEXES(PARENT,2:vMax+1)=1;
C_VERTEXES=vMax+1;                                     % кількість вже записаних вузлів

% ПОБУДОВА МАТРИЦІ ВУЗЛІВ ІЗ ОДНОЧАСНИМ ВИЗНАЧЕННЯМ ІНФОРМАЦІЇ ПРО НИХ
% проходимо по усім вузлам в матриці VERTEXES (окрім першого)
for i=2:n
    C_IMINDEX=VERTEXES(INDEX,i);                        % беремо черговий вузол
    C_IMPINDEX=VERTEXES(INDEX,VERTEXES(PARENT,i));      % визначаємо індекс батька в IM
    IM(C_IMINDEX,C_IMPINDEX)=0;                         % батько не є сином
    VERTEXES(VALUE,i)=IM(C_IMPINDEX,C_IMINDEX);         % записуємо довжину ребра
    [vSons,iSons]=find(IM(C_IMINDEX,:)~=0);             % знаходимо синів поточного вузла
    if ~isempty(vSons)
        [temp,cSons]=size(vSons);                       % визначаємо кількість синів
        % зберігаємо про них інформацію у матриці VERTEXES
        VERTEXES(INDEX,C_VERTEXES+1:C_VERTEXES+cSons)=iSons;
        VERTEXES(LEVEL,C_VERTEXES+1:C_VERTEXES+cSons)=VERTEXES(LEVEL,i)+1;
        VERTEXES(SONS,i)=cSons;
        VERTEXES(PARENT,C_VERTEXES+1:C_VERTEXES+cSons)=i;
        C_VERTEXES=C_VERTEXES+cSons;
    else
        VERTEXES(SONS,i)=0;
    end
end
% проходимо у зворотньому порядку і визначаємо висоти (глибини) вузлів
for i=n:-1:2
    if VERTEXES(DEPTH,VERTEXES(PARENT,i))<VERTEXES(DEPTH,i)+1
        VERTEXES(DEPTH,VERTEXES(PARENT,i))=VERTEXES(DEPTH,i)+1;
    end
end
% ТЕПЕР МАТРИЦЯ ІНЦИДЕНТНОСТЕЙ ОБРОБЛЕНА І ПОБУДОВАНО МАТРИЦЮ VERTEXES

clear n INDEX LEVEL SONS PARENT VALUE DEPTH vSons iSons C_VERTEXES cSons i
clear C_IMINDEX C_IMPINDEX
