function [selected, maxsize] = subset_antirobinson(a) tic; epsilon=.0000001; [n,n1]=size(a); for i = 1:n a(i,i) = 0; end d = zeros(n,n,n); for i = 1:n for j = 1:n if i==j continue end for k = 1:n if k==i || k==j continue end if a(i,k) >= a(i,j) && a(i,k) >= a(j,k) d(i,j,k) = 1; end end end end maxsize = 0; q = zeros(1,n+1); s = zeros(1,n+1); m = 1; q(m) = 1; s(1) = 1; trig1 = 0; trigend = 0; while trigend == 0 if trig1 == 0 m = m + 1; trig1 = 1; % advance pointer end q(m) = q(m) + 1; if s(q(m)) == 1 % redundancy continue end if m == 1 && q(m) > n % terminate trigend = 1; continue end if m > 1 && q(m) > n % retract s(q(m)) = 0; q(m) = 0; m = m - 1; s(q(m)) = 0; continue end test_fail = 0; for i = 1:m-2 for j = i+1:m-1 if d(q(i),q(j),q(m)) == 0 test_fail = 1; break end end if test_fail == 1 break end end if test_fail == 0 if m > maxsize maxsize = m; selected = q; end trig1 = 0; s(q(m))=1; end end toc