蚂蚁走迷宫
现实生活中,工蚁每天需要为蚁巢寻找食物,但是寻找的过程可能并不是一帆风顺的。它可能经过重重障碍才能找到一份食物运回蚁巢。下面请你用matlab来模拟这个寻食的过程,请看下面的矩阵,假设A点是觅食起点,B点是食物的位置,‘1’代表不能走的位置,即障碍,‘0’代表可以走的路。
1. 显示矩阵
2. 能够使用程序自动的找到一条到出口的路线
3. 能使用程序一次性找到三条到出口的路线
4. 能够使用程序得知每条路线的长度
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 A0 0 1 1 0 0 0 0 1 1 1 1 1 1
1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1
1 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1
1 0 0 0 0 1 1 0 1 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1
1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1
1 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1
1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1
1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1
1 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1
1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1
1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1
先是打印矩阵,因为要打印路线,所以有字符型的元素*,所以在输入A的矩阵之后,要将矩阵由数组型转换为字符型的矩阵,然后字符型的矩阵的空格(两个元素之间)是为两个长度,所以这就是后面的j+3和j-3的原因,然后行之间是没有这样的,判断某个路是否能走的条件的设立就是,判断它的四个方向的元素有没有没0的,如果有,则在这里打印个*,然后继续往下面递归,思想就是这样的,下面献上代码
function [i,j]=visits(i,j)
global A ii
Alo=[A(i+1,j)=='0',A(i,j+3)=='0',A(i,j-3)=='0',A(i-1,j)=='0'];
if(Alo(1)==1)
i=i+1;
elseif(Alo(2)==1)
j=j+3;
elseif(Alo(3)==1)
j=j-3;
else
j=j+3;
end
A(i,j)='*';
ii=ii+1;
if(i~=15||j~=43)
[i,j]=visits(i,j);
end
end
clc;clear;
global A ii
A=...
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
1 3 0 0 1 1 0 0 0 0 1 1 1 1 1 1;
1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1;
1 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1;
1 0 0 0 0 1 1 0 1 0 0 1 1 1 1 1;
1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1;
1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1;
1 0 1 0 0 1 1 0 0 0 0 0 1 1 1 1;
1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1;
1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1;
1 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1;
1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1;
1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1;
1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1;
1 1 1 1 1 1 1 1 1 1 0 0 0 0 2 1;
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
];
disp('迷宫图')
A=num2str(A)%% 2为出口点(2,4) 3为起始点A(15,43)
B=A;
%% 第一种
ii=1;
visits(2,4);
disp('第一种走出迷宫图')
A