使用BFS解决经典迷宫问题(附matlab代码)

目前网上关于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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿癌基因

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值