function res=prim2(c)
%getting an adj matrix of a graph returns adj matrix of a SST using Prim
%algorithm

%validity check
if nargin~=1
    error('incorrect number of input arguments');
end
if nargout~=1
    error('incorrect number of output arguments');
end
%body
n=size(c,1);
res=zeros(n,n);
min=inf;
imin=1;
jmin=1;
for i=1:n
    for j=1:n
        %if c(i,j)==0
            %c(i,j)=inf;
            %end
            for i=1:n
                c(i,i)=inf;
            end
        if and(c(i,j)<min,c(i,j)>=0)
            min=c(i,j);
            imin=i;
            jmin=j;
        end
    end
end
res(imin,jmin)=min;
res(jmin,imin)=min;
c(imin,jmin)=inf;
c(jmin,imin)=inf;
nl=2;
list=[imin,jmin];
min=c(imin,1);
jmin2=1;
while nl<n
    min2=inf;
    imin2=1;
    jmin2=1;
    for i=1:nl
        imin=list(i);
        min=c(imin,1);        
        jmin1=1;
        for j=2:n
            if and(c(imin,j)<min,c(imin,j)>0)
                min=c(imin,j);
                jmin1=j;
            end
        end
        if min<min2
            min2=min;
            imin2=imin;
            jmin2=jmin1;
        end
    end
    if min2==inf
        break;
    end
    list=[list,jmin2];
    nl=nl+1;
    res(imin2,jmin2)=min2;
    res(jmin2,imin2)=min2;
    for k=1:nl
        c(list(k),jmin2)=inf;
        c(jmin2,list(k))=inf;
    end
end
min=inf;