clear all
clc
a1=[-1 -1 1 0; -4 -1 0 1]
b=[-2;-4]
c=[-5 -6 0 0 0]
bv=[3 4]
a=[a1 b]
zc=c(bv)*a-c
table=[a;zc]
array2table(table,'variablename',{'x1','x2','s1','s2','sol'},'rownames',{'bv1','bv2','zj-cj'})
run=true
while run 
    sol = a(:, end)
    if any(sol<0)
        [minsol pvtrow] = min(sol)
        row=a(pvtrow,1:end-1)
        zjcj=zc(1:end-1)
        for i=1:size(zjcj,2)
            if row(i)<0
                ratio(i)=abs(zjcj(i)/row(i))
            else
                ratio(i)=inf %inf is infinite
            end
        end
     [minr pvtcol] = min(ratio)
     bv(pvtrow)=pvtcol
     pvtKey=a(pvtrow,pvtcol)
     a(pvtrow,:)=a(pvtrow,:)/pvtKey
     for i=1:size(a,1)
                if i~=pvtrow
                    a(i,:)=a(i,:)-a(i,pvtcol)*a(pvtrow,:)
                end
      end
            
            zc=c(bv)*a-c
            nexttable=[a;zc]
            array2table(nexttable,'variablename',{'x1','x2','s1','s2','sol'},'rownames',{'bv1','bv2','zjcj'})
     
    else
    run=false
    fprintf('final optimal table has been obtained and optimal vaule is %f',zc(end))
    end
end