Не могли бы вы сказать, почему этот код MATLAB неверен?Я не понимаю почему.Заранее большое спасибо.
function [mst, cost] = prim(A)
[n,n] = size(A);
A, n, pause,
if norm(A-A','fro') ~= 0 ,
disp(' Error: Adjacency matrix must be symmetric ')
return,
end;
intree = [1]; number_in_tree = 1;
number_of_edges = 0;
notintree = [2:n]'; number_notin_tree= n-1;
in = intree(1:number_in_tree),
out = notintree(1:number_notin_tree),
pause,
while number_in_tree < n,
mincost = Inf;
for i=1:number_in_tree,
for j=1:number_notin_tree,
ii = intree(i); jj =
notintree(j);
if A(ii,jj) < mincost,
mincost = A(ii,jj); jsave = j;
iisave = ii; jjsave = jj;
end;
end;
end;
number_of_edges = number_of_edges +1;
mst(number_of_edges,1) = iisave;
mst(number_of_edges,2) = jjsave;
costs(number_of_edges,1) = mincost;
number_in_tree = number_in_tree + 1;
intree = [intree; jjsave];
for j=jsave+1:number_notin_tree,
notintree(j-1) = notintree(j);
end;
number_notin_tree = number_notin_tree - 1;
in = intree(1:number_in_tree),
out = notintree(1:number_notin_tree),
pause,
end;
disp(' Edges in minimum spanning tree and their costs: ')
[mst costs]
cost = sum(costs)
Когда я нажимаю кнопку запуска, появляется сообщение:
Not enough input arguments.
Error in prim (line 10)
[n,n] = size(A);
% The matrix is n by n, where n = # nodes.
Однако, когда я вызываю функцию в окне команд с помощью
s=[1 1 2 2 2 3 3 4 4 4 5 5 6 7];
t=[2 3 4 5 3 5 6 5 7 8 6 8 7 8];
w=[3 5 4 7 4 9 8 3 11 8 3 9 8 7];
G = graph(s,t,w);
A = adjacency(G);
prim(A)
Код работает «правильно»
В качестве окончательного ответа возвращается
mst =
cost=
All zero sparse: 1-by-1
Должно быть возвращено
mst =
1 2
2 3
2 4
4 5
5 6
6 7
7 8
стоит = 32
Почему это не вернулось?
Во время работы программа перешла с 1 на 4, хотя она должна была перейти на 2. Затем с 4 до 5, это было правильно, но я не знаю, почему пропустили 2 и 3 иперешли непосредственно к 4,5,6,7,8.
Помогите мне, пожалуйста.
Если есть альтернативный код, который вы знаете, укажите его, возможно, более простой.