-1

我有这个带有 Matlab 的 tarjan 程序的代码源,当我运行 prog 时出现这个错误,我该如何修复它

function [C, S, idx, index, index_accessible] = strongconnect(C, G, v, S, idx, index,       index_accessible)
index(v) = idx;
index_accessible(v) = idx;
idx = idx+1;
S = push(S,v); %ajouter le sommet courant à la pile

% Liste les sommets adjacents au sommet courant
n = voisin(G,v);

% Parcours récursif
for i = 1:length(n)
    if(index(n(i)) == 0)
        [C, S, idx, index, index_accessible] = strongconnect(C, G, n(i), S, idx, index,  index_accessible);
        index_accessible(v) = min(index_accessible(v), index_accessible(n(i)));
    elseif (~isempty(find(S == n(i), 1)))
        index_accessible(v) = min(index_accessible(v), index(n(i)));
    end
end

% Le sommet est une racine, on calcule la composante fortement connexe associée
if(index_accessible(v) == index(v))
    cc = []; %composante fortement connexe issue du sommet
    if(~isempty(S))
        [tmp, S] = pop(S);
        cc = [cc tmp];
    end
    while(~isempty(S) && tmp ~= v)
        [tmp, S] = pop(S);
        ***cc*** = [cc tmp];
    end
    if(~isempty(cc))
        % Les composantes connexes n'ont pas toutes
        % la même longueur. On complète donc la ligne
        % avec des 0.
        C = [C ; cc zeros(1,size(G,1) - length(cc))];
    end
end
end

问题在于星星之间的cc

4

1 回答 1

0

代码中没有错误。输入是一个图矩阵,我使用了一个随机生成的:

G=randi(10,20,20)==1;

现在调用函数:

C=tarjan(G);

C 的每一行包含一个组件。

如果这不能回答您的问题,请更新它,包括错误描述和您的输入数据。

于 2014-02-06T23:40:12.923 回答