function [w,levels,ll] = treewidth(T) [n,n] = size(T); global LEVELS LEVELS = repmat({[]},n,1); getLevels(T,1,0); w = 0; ll = []; for ell = 1:n w = max(w,length(LEVELS{ell})); if ~isempty(LEVELS{ell}) ll(end+1)=length(LEVELS{ell}); end end levels = LEVELS; return function getLevels(T,u,ell) global LEVELS ell = ell+1; LEVELS{ell}(end+1) = u; ukids = find(T(u,:)); for vi=1:length(ukids) v = ukids(vi); getLevels(T,v,ell); end return