目前网上关于matlab版本的BFS代码比较难找。我这里提供一份现成的😄
function [x,y]=bfs(start,dist,p)%x是最短路径,y是路径矩阵,start是开始坐标,dist是目标坐标,p是坐标矩阵。我这里设置值为1是能通行区域,其他值不能通行
n=[1 0;0 -1;0 1;-1 0];
road=[start,0];step=0;temp=road(1:2);k2=2;k1=1;
while (1)
if size(road,1)~=1
temp=road(k1+1:k2,1:2);
end
a=size(road,1);
if k2-k1<=0
num=1;
else
num=k2-k1;
end
for j=1:k2-k1
count=1;
for i=1:4
b=temp(j,:)+n(i,:);
if (b(1)<=0||b(2)<=0||b(1)>32||b(2)>22||p(b(1),b(2))~=1)||sum(sum(road(:,1:2)==b,2)==2)%这里“p(b(1),b(2))~=1)”按需要更改
continue;
end
road(end+1,1:2)=b;
road(end,4:5)=temp(j,:);
end
end
step=step+1;
k1=a;
k2=size(road,1);
road(k1+1:k2,3)=step;
if sum(sum(road(:,1:2)==dist,2)==2)
break;
end
end
for i=1:step
j=step+1-i;
if j==step
d=road(sum(road(:,1:2)==dist,2)==2,4:5);
else
d=road(sum(road(:,1:2)==d,2)==2,4:5);
end
path(j,:)=d;
end
path=[path;dist];
x=step;
y=path;
end