clear all;
clc;
% ADD-Algorithmus

A=[1 2 10 9 6 7 3                           
    2 9 0 7 3 6 10
    7 6 1 5 3 10 5
    6 5 10 2 6 3 6 
    6 4 6 3 7 2 6];

fix=[5; 7; 5; 6; 5];
[m,n]=size(A)
I0=[];
I=[1:m];
I1=[];

Zeilensum=sum(A,2);

gesamt=fix+Zeilensum
k=find(gesamt==min(gesamt))

I1=[I1 k]
I0_t=I;

I0_t(k)=[]

F=fix(k)+Zeilensum(k)
fix(k)=[];

W=[];

for j=1:n
    for i=1:m
        if any(I0_t(:) ==i)
           W(i,j)= max(A(k,j)-A(i,j),0);
         end
    end
end


% 2. Schritt
while ~isempty(I0_t)
s=[];
min=[];
gesamt=[];
for i=1:m
      if any(I0_t(:) ==i)
        s= sum(W,2);
        if s(i)<= fix(i)
            min=i;
            I0=i;
            I0_t(i)=[];
            
         end
          gesamt(i)=s(i)-fix(i);
      end
end
fix(min)=[];
min
s
gesamt
I0
I0_t

k=find(gesamt==max(gesamt));
fix(k)=[];
if k>=0
    I1=[I1 k];
    I0_t(k)=[];
    F=F-s(k)+fix(k);
else
    I0=[I0 k];
end

for j=1:n
    for i=1:m
    if any(I0_t(:)==i)
         W(i,j)=max(W(i,j)-W(k,j),0);
    end
    end
end



if isempty(min)
    W(k,:)=[];
else
    if k>min
        W(k,:)=[];
        W(min,:)=[];
    else
        W(min,:)=[];
        W(k,:)=[];
    end
end
end
I0
I1
W
    
