% Start with 3 missionaries and 3 cannibals and the boat on the left side. start = [3 3 1] s1 = generate(start); goal_reached(s1); % Test if goal has been reached. s2 = generate(unique(s1,"rows")(:,1:3)); goal_reached(s2); s3 = generate(unique(s2,"rows")(:,1:3)); goal_reached(s3); s4 = generate(unique(s3,"rows")(:,1:3)); goal_reached(s4); s5 = generate(unique(s4,"rows")(:,1:3)); goal_reached(s5); s6 = generate(unique(s5,"rows")(:,1:3)); goal_reached(s6); s7 = generate(unique(s6,"rows")(:,1:3)); goal_reached(s7); s8 = generate(unique(s7,"rows")(:,1:3)); goal_reached(s8); s9 = generate(unique(s8,"rows")(:,1:3)); goal_reached(s9); s10 = generate(unique(s9,"rows")(:,1:3)); goal_reached(s10); s11 = generate(unique(s10,"rows")(:,1:3)); goal_reached(s11); % Now backtrack to get the steps if goal_reached(s11) steps = zeros(1,3); r = all(s11(:,1:3) == 0,2); last_steps = s11(r,:); last_states = last_steps(:,5:7); steps(2,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s10(:,1:3) == last_states(i,:),2); last_steps = s10(r,:); end %end last_states = last_steps(:,5:7); steps(3,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s9(:,1:3) == last_states(i,:),2); last_steps = s9(r,:); end %end last_states = last_steps(:,5:7); steps(4,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s8(:,1:3) == last_states(i,:),2); last_steps = s8(r,:); end %end last_states = last_steps(:,5:7); steps(5,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s7(:,1:3) == last_states(i,:),2); last_steps = s7(r,:); end %end last_states = last_steps(:,5:7); steps(6,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s6(:,1:3) == last_states(i,:),2); last_steps = s6(r,:); end %end last_states = last_steps(:,5:7); steps(7,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s5(:,1:3) == last_states(i,:),2); last_steps = s5(r,:); end %end last_states = last_steps(:,5:7); steps(8,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s4(:,1:3) == last_states(i,:),2); last_steps = s4(r,:); end %end last_states = last_steps(:,5:7); steps(9,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s3(:,1:3) == last_states(i,:),2); last_steps = s3(r,:); end %end last_states = last_steps(:,5:7); steps(10,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s2(:,1:3) == last_states(i,:),2); last_steps = s2(r,:); end %end last_states = last_steps(:,5:7); steps(11,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(s1(:,1:3) == last_states(i,:),2); last_steps = s1(r,:); end %end last_states = last_steps(:,5:7); steps(12,:) = last_states(1,:); %if size(last_states,1) > 1 for i = 1:size(last_states,1) r = all(start(:,1:3) == last_states(i,:),2); last_steps = start(r,:); end %end flipud(steps) end