image thumbnail
from Breaking Chocolate Bars by Krishna Lalith
Break the given Chocolate Bar with minimum number of breaks.

[valid,row,col]=heuristic(BrBa_store,barbreak,M,N,row,col)
function [valid,row,col]=heuristic(BrBa_store,barbreak,M,N,row,col)

valid=0;
BrBa_all=zeros(M*(N-1)+N*(M-1),2);

%finding all the valid possibilities
count=0;
for ii=1:M,
    for jj=1:N-1,
         count=count+1;
         BrBa_all(count,:)=[2*ii-1 2*jj];         
    end
end

for ii=1:M-1,
    for jj=1:N,
         count=count+1;
         BrBa_all(count,:)=[2*ii 2*jj-1];         
    end
end

for ii=1:count,
    temp=0;
    for jj=1:barbreak,
         if BrBa_all(ii,:)~=BrBa_store(jj,:),  temp=temp+1;  end
    end
    if temp==barbreak,           
        if (row==BrBa_all(ii,1)-2 || row==BrBa_all(ii,1)+2 && mod(row,2)==0), 
            row=BrBa_all(ii,1);  
            col=BrBa_all(ii,2);
            valid=1;
            break;
        end
        if (col==BrBa_all(ii,2)-2 || col==BrBa_all(ii,2)+2 && mod(col,2)==0), 
            row=BrBa_all(ii,1);  
            col=BrBa_all(ii,2);
            valid=1;
            break;
        end      
    end
    if valid==1,  break;  end
end

%close choice using minimum Manhattan Distance
if valid==0,
    min=10;
    for ii=1:count,
        if (abs(BrBa_all(ii,1)-row)+abs(BrBa_all(ii,2)-col))<min, 
            min=abs(BrBa_all(ii,1)-row)+abs(BrBa_all(ii,2)-col);
            jj=ii;
        end
    end
    row=BrBa_all(jj,1); col=BrBa_all(jj,2);
    valid=1;
end

Contact us at files@mathworks.com