matlab:栅格地图转化为邻接矩阵

function D=G2D(G) %邻接矩阵就是每个栅格之间的距离
[m,n]=size(G); %返回矩阵G的尺寸 并将行返回到m中,列返回到n中
N=m*n; %元素个数   
D=zeros(N,N); %生成一个n*n的0矩阵
for Dx=1:N               
    for Dy=Dx:N       
        x1=ceil(Dx/n);%返回不小于x的最小整数值
        y1=mod(Dx,n); %Dx对n取余
        if y1==0
            y1=n;
        end
        x2=ceil(Dy/n);
        y2=mod(Dy,n);
        if y2==0
            y2=n;
        end
      if Dx==Dy
          D(Dx,Dy)=inf;
      elseif (G(x1,y1)==1) || (G(x2,y2)==1);
            D(Dx,Dy)=inf;
      else
            if (mod(Dx,n) ==1)
                if(Dx==1)
                    if (Dy-Dx==1) || (Dy-Dx==n)
                        D(Dx,Dy)=1;
                    elseif (Dy-Dx==n+1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                elseif(Dx==N-n+1)
                    if (Dy-Dx==1) || (Dx-Dy==n)
                        D(Dx,Dy)=1;
                    elseif (Dx-Dy==n-1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                else
                    if (Dy-Dx==1) || (Dy-Dx==n) || (Dx-Dy==n)
                        D(Dx,Dy)=1;
                    elseif (Dx-Dy==n-1) || (Dy-Dx==n+1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                end
                
            elseif mod(Dx,n) ==0
                if(Dx==n)
                    if (Dx-Dy==1) || (Dy-Dx==n)
                        D(Dx,Dy)=1;
                    elseif (Dy-Dx==n-1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                elseif(Dx==N)
                    if (Dx-Dy==1) || (Dy-Dx==n)
                        D(Dx,Dy)=1;
                    elseif (Dy-Dx==n+1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                else
                    if (Dx-Dy==1) || (Dy-Dx==n) || (Dx-Dy==n)
                        D(Dx,Dy)=1;
                    elseif (Dy-Dx==n-1) || (Dx-Dy==n+1)
                        D(Dx,Dy)=sqrt(2);
                    else
                        D(Dx,Dy)=inf;
                    end
                end
                
            else
                if (Dx-Dy==1) || (Dy-Dx==1) || (Dy-Dx==n) || (Dx-Dy==n)
                    D(Dx,Dy)=1;
                elseif (Dx-Dy==n+1) || (Dy-Dx==n+1) || (Dy-Dx==n-1) || (Dx-Dy==n-1)
                    D(Dx,Dy)=sqrt(2);
                else
                    D(Dx,Dy)=inf;
                end
            end
      end
    end
end
for i=1:N
    for j=i:N
        if(i~=j)
            D(j,i)=D(i,j);
        end
    end
end

        传入0/1矩阵形式的栅格地图(如下图中的[1 0 0;0 0 0;0 0 0]矩阵<右图,黑色为障碍物1>),将其转换为如下图所示的邻接矩阵,1表示障碍物,不可达;0表示没有被占据,可以通过。则1号与所有元素都不可达为inf,并且将自身与自身也设为不可达:

 

其在蚁群算法路径规划中的应用可参考https://blog.csdn.net/KantsWang/article/details/83753515

代码均为他人代码,只作学习参考之用。

 

 

  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB基于栅格地图的Dijkstra算法是一种用于寻找中最短路径的算法。它通过将地表示为网格(栅格)的形式来进行计算。 首先,我们需要将地表示为一个矩阵,其中每个单元格代表地上的一个位置。这个矩阵中的值可以代表该位置的类型,例如墙壁、通道或目标位置。 接下来,我们需要定义一个起始点和一个目标点。然后,我们将初始化一个距离矩阵,其中包含从起始点到每个位置的初始距离值。起始点的距离值被设为0,其他位置的距离值被设为无穷大。 然后,我们逐步更新距离矩阵以找到最短路径。首先,我们选择当前距离矩阵中距离值最小的位置,并将其标记为已访问。然后,我们检查该位置的邻居,更新他们的距离值。 如果一个邻居的距离值比以前的距离值更短,我们将更新它的距离值,并将其添加到一个优先队列中。这个优先队列按照距离值进行排序,以便我们在下一步选择距离值最小的位置。 我们重复以上步骤,直到我们找到目标位置或者我们访问完所有可达位置。最后,我们可以通过回溯从目标位置到起始点,得到最短路径。 在MATLAB中,我们可以使用矩阵和循环结构来实现这个算法。我们可以使用内置函数来实现优先队列的功能,或者自己实现一个简单的队列数据结构。通过编写正确的循环和条件语句,我们可以逐步更新距离矩阵,并最终找到最短路径。 总结来说,MATLAB基于栅格地图的Dijkstra算法是一种用于寻找中最短路径的算法。它通过将地表示为网格矩阵,并逐步更新距离值来实现。我们可以使用MATLAB内置函数和数据结构来实现这个算法,并最终找到最短路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值