以下是一个可能的解法,使用递归实现:

function crossRiver(m, n) % m: 商人数量 % n: 仆人数量

% 初始化船的位置(1代表左岸,0代表右岸) boat = 1;

% 初始化左岸人员数量 left_m = m; left_n = n;

% 初始化右岸人员数量 right_m = 0; right_n = 0;

% 递归函数 cross(boat, left_m, left_n, right_m, right_n);

end

function cross(boat, left_m, left_n, right_m, right_n) % boat: 船的位置 % left_m: 左岸商人数量 % left_n: 左岸仆人数量 % right_m: 右岸商人数量 % right_n: 右岸仆人数量

% 判断是否所有人都已经过河 if left_m == 0 && left_n == 0 fprintf('All people have crossed the river!\n'); return; end

% 判断船的位置,确定可选人员 if boat == 1 % 船在左岸 for i = 0:2 for j = 0:2 if i + j > 0 && i + j <= 2 && i <= left_m && j <= left_n && (i == 0 || i >= j) % 可以选择i个商人和j个仆人过河 cross(0, left_m-i, left_n-j, right_m+i, right_n+j); end end end else % 船在右岸 for i = 0:2 for j = 0:2 if i + j > 0 && i + j <= 2 && i <= right_m && j <= right_n && (i == 0 || i >= j) % 可以选择i个商人和j个仆人过河 cross(1, left_m+i, left_n+j, right_m-i, right_n-j); end end end end

end

调用该函数:crossRiver(3, 3) 即可实现三个商人和三个仆人过河

给出商人过河m商人n仆人的Matlab代码一个船最多坐2人

原文地址: http://www.cveoy.top/t/topic/gSwy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录