2014-02-06 62 views
-1

我有用Matlab的Tarjan程序这个代码源改变大小,这种错误出现时我运行PROG,如何解决它变量“抄送”似乎在每次循环迭代的matlab

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 

的问题是与分

+2

这是一个警告,而不是一个错误。预分配cc将使代码运行得更快。如果你知道'cc = []'这一行中cc的大小,你可以用'cc = nan(5,1)'这样的东西来初始化cc。这将创建一个大小为5的数组,稍后填充。 – Daniel

+0

我还是一个matlab初学者,我想用matlab的Tarjan算法的源代码,我在这个链接[链接]找到代码[(http://glotin.univ-tln.fr/graphes/graphtook/ tarjan.html),我无法执行代码,我认为问题在于cc,但因为它只是一个警告,所以它不是主要错误。你能告诉我如何运行这些代码行,我输入的命令行和输入是什么结果,非常感谢你 – user3281660

+0

我回滚了问题编辑,因为它删除了所有相关信息这个问题。确保问题依然清晰,即使您已经有了答案。 –

回答

0

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

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

现在调用函数:

C=tarjan(G); 

C的各行包含一个组件。

如果这不回答你的问题,请更新包括一个错误的描述,你的输入数据。

+0

是的,它是很好的丹尼尔,我做了邻接矩阵这个小测试,我得到这个矩阵的问题是,我不知道如何读来确定强连接组件可一个帮助 – user3281660

+0

C的各行包含一个的索引连接组件。 – Daniel

+0

我更新了当前问题的帖子看看 – user3281660

相关问题