资源简介

运输问题的最低运价问题,文档中打开手动输入price运价、prod产量、sell销量,run就可以显示结果,通过调整可以很方便的让它显示需要的数据。 你值得拥有,无论中国知网、还是百度,都没有完整的matlab运输问题表上作业法算法。

资源截图

代码片段和文件信息

function [resultpoint1point2]=bestpath(A1ij)

if nargin==0
    A =[nan nan 5 2;3 nan nan 1;nan 6 nan 3]        %用来测试闭合回路的算法
    x=3;y=1;
elseif nargin==3
    A=A1;x=i;y=j;
end
move=[1 0;-1 0;0 1;0 -1];                        %指针的移动方向,下、上、右、左
[mn]=size(A);                                   %m、n分别为A的行数和列数

R=[];
%------------行的可行性标记
[marksijrowcolB]=mark(Axy);              %初始化可行性路径
prev=[0 0];                                     %用于保存上一次移动时的移动方向
[~R~~~]=seekPath(B0marksmoveRprev0ijrowcol);  %查询比和路径

[resultresult1point1point2]=res(ArowcolRmn);                        %查询结果,用二进制表示路径
function [isfindRtimesrowcolprev]=seekPath(AisfindmarksmoveRprevtimesijrowcol)
  if (i==row &&j==col)                   %判断是否又回到查找起点
        times=times+1;
        if times==2                      %此时回到起点,查找结束
            isfind=1;
            return
        end
  end
  x=i;y=j;
  if isnan(A(ij))              %该数据点为空所执行的算法
      next=prev;                %如果数据格为空则只能直走     
      u=i-prev(1);v=j-prev(2);  %按照前一次的方向移动
      if prev(1)
          mrow=2;
      else
          mrow=1;
      end
      if marks(u+1v+1mrow)==1
         [isfindRtimesrowcol]=seekPath(AisfindmarksmoveRnexttimesuvrowcol);
         if isfind==1
              R=[R;i j];
              return
         end
      end
  else
        for k=1:4
            if k==1||k==2
                mrow=2;
            else
                mrow=1;
            end
            u=i+move(k1);
            v=j+move(k2);
            
            if prev(1)~=move(k1)||prev(2)~=move(k2)               %判断是否原路返回
                if marks(u+1v+1mrow)==1
                    next=[-move(k1)-move(k2)];
                    [isfindRtimesrowcol]=seekPath(AisfindmarksmoveRnexttimesuvrowcol);
                       if isfind==1
                           R=[R;i j];
                           return
                       end
                end
           end
        end
  end
    function [resultresult1point1point2]=res(ArowcolRmn)
        [m1n1]=size(R);
        point=[];
        num=0;
        
        A(rowcol)=0;                   %为了以后记录方便
        result=zeros(mn);              %只记录转折点的值
        result1=zeros(mn);  
        result2=zeros(mn); 
 
        result2(rowcol)=1;
        
        for i=1:m1
            if ~isnan(A(R(i1)R(i2))) 
                result2(R(i1)R(i2))=1;
            end
        end
        
        %只保留拐角处的结点,
        for i=1:m
            T1=find(result2(i:)==1);
            if length(T1)>1
                result(iT1(1))=1;
                result(iT1(length(T1)))=1;
                
                result1(iT1(1))=A(iT1(1));
                result1(iT1(length(T1)))=A(iT1(length(T1)));
            end
        end
        for j=1:n
            T2=find(result2(:j)==1);
            if length(T2)>1
             

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4668  2013-04-23 17:52  matlab 运输问题表上作业\bestpath.m
     文件        8252  2013-04-24 12:45  matlab 运输问题表上作业\vogel.m
     目录           0  2013-04-25 21:11  matlab 运输问题表上作业\

评论

共有 条评论