狼羊人菜渡河问题
解答
试探法
因为有4个变量,所以一共有222*2=16种状态
找出其中不安全的状态:无人看守的状态下:狼羊一起,羊菜一起
人 狼 羊 菜(0是在对面,1是在这边)
狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1)
羊菜一起:(0,0,1,1) (1,1,0,0)
其余的10个都是安全状态
得到状态转移图:证明是最优解
人1->0代表人渡河了,从此状态到下一个状态
(1,1,1,1)最开始的状态->(0,1,0,1)人带着羊一起渡河
商人过河问题
解答
模型建立
1)这时不能再使用(1,1,1,1,1,1)这种记录状态,有太多重复的,没有必要,直接使用(商人人数,仆人人数)
2)因为当商人人数<仆人人数时,不安全,即有(1,2) (1,3) (2,3)这三种;但同时要同时保证这边和对岸都是安全的,一边不安全,这个状态就是不安全的,所以,对应的(2,1) (2,0) (1,0)也是不安全状态
3)所以一共有4*4=16-6=10种安全状态
方法一:直观法
使用x-y作图,观察可得路线,相当于下棋
方法二:模型法
状态转移图
(商人,仆人)加上一个船的状态,就能进行状态转移(1次最多减少2个)
不能漏掉任何一条连线
等分酒问题
解答
注意:每次操作只有两个瓶子,一个瓶子向另一个瓶子倒酒之后,下一步就不要再倒回来了,没有必要且重复了
所以可以列出所有可能的操作结果
状态转移图
棋子颜色问题
分析
1)在这里棋子的状态不使用0,1;因为00=0,10=0不能从中判断出棋子的颜色
2)所以需要进行变化的状态,一般都可以考虑(a,-a)
举例归纳:
多举几个列子(偶数,奇数),这样才能看出规律
n=2时
n=3:
当a1^2=1时,可以直接省略掉(这就是省略偶数项)
n=4:
n=5:
结论
matlab程序
%:matlab注释
x0=zeros(1,n):产生一个1行n列的矩阵,用来存放输入数据-数组
x1=zeros(1,n):用来存放输出结果-数组
for i=1:n从1到n开始循环
rand(1,1):1行1列(就是一个数),产生一个0-1之间的随机实数
x0(i)=1:x0数组的第一个元素赋值为1
for k=1:n-1:对前面n-1个棋子进行操作(因为里面要用到k+1)
四人追逐问题
解答
1)顺时针追逐,不是沿着正方形追逐,而是以对准下一个人的位置曲线的形式顺时针方向追逐
2)运动轨迹是曲线,但在每一小段时间内,是一个直线(以曲化直的思维),所以此时求两个人之间的距离直接变为了求直线距离
3)因为一个人追下一个人,所以追逐是两个人的,假设每个人的坐标,使用三角公式就可以求得距离
4)因为最后是要求轨迹曲线,要作图,所以直接使用在x和y两个方向上的距离
表达式:
matlab程序
n=240;//总时刻,使用matlab多次测试看多少时刻时可以追上
x=zeros(4,n):4个人,240个时刻;x和y是使用两个数组去记录每个人x坐标和y坐标
dt=0.05;//从0开始每次增加0.05时刻,一直增加到240时刻追上了为止
v=10;//自己设定的速度
for j=1:n-1 1到n-1,因为要用到j+1
前三个人和最后一个人的公式不同,所以要分开写
sqrt():计算平方根
x(i,j+1):计算每一个时刻的每个人的x坐标
vdtcosx:速度x时间间隔x在x方向上的距离(因为实际运动轨迹是曲线)
第四个人追第一个人:因为先写的前三个人的运动代码,所以,这里使用第一个人-第四个人
x(1,j) -x(4,j)
plot()绘图,绘制每一个时刻每个人的位置
ro:红色 bo蓝色 go绿色 yo黄色
hold on 添加新绘图时保存原有绘图,这样能把所有的点显示在上面
pause(0.1)让屏幕暂停0.1s,这样能有逐步显示的效果(动画效果)
舰艇追击问题
理论求解
计算机模拟
matlab程序代码