24
回答
城区公路选址问题~~
华为云实践训练营,热门技术免费实践!>>>   
某区政府计划在下列区域(见图1)修建一条从A(0,9)到B(9,0)的直线型公路,由于涉及路面拆迁等因素,各地段建设费用有所不同,图1中的数字代表该区域公路单位建设费用(单位:百万元)。未标数字的任何地方单位建设费用均为1。图1的每个网格长与宽都是1个单位。每个网格的边界上建设费用按该地区最小单位费用计算。

    请你按建设部门的如下具体要求,从建设费用最省的角度,给出最优的方案。

(1)公路至多只能有1个转弯点,且转弯点只能建在图1所示的网格点上。

(2)公路至多可以有2个转弯点,且转弯点只能建在图1所示的网格点上。

(3)公路至多只能有2个转弯点,且转弯点只能建在图1所示的网格线上。

(4)公路至多只能有2个转弯点,转弯点可以建在图1所示区域的任何位置。

(5)如果各区域的单位建设费用为(百万元),公路至多只能有1个转弯点,转弯点可以建在图1所示区域的任何位置。

<无标签>
举报
共有24个答案 最后回答: 5年前
这题目不是有过了吗?奶奶的,不急啊。回头我招了。专门让他做这类题目。我懒得做了。哈。

@中山野鬼

我们在编程中遇到了点困难

思路是利用穷举法找C点,求出AC,CB直线方程,接着解出直线与网格的每一交点, 再算每一网格内线段长度*单位造价,这样累积和最小。

程序:clear all
clc
z=[];
q=[];
g=0;
k=0;
v=0;
w=[];
zuixiao=[];
for x=1:1:9   
    for y=4:1:8  %随机取目标点P
      if x<=y & x+y>=9
         for m=1:1:x 
          z=[z,m];
         end
         for n=9:-1:y
          d=(n-9)*x/(y-9);            %循环找出x整数直线与AP的交点
          z=[z,d];
         end
         z=[z,0];
         z=unique(z);
         m=size(z,2);
         for i=1:1:m
         p(i)=((y-9)/x)*z(i)+9;
         end
          for i=2:1:m                    %要求多少个距离
             n=((z(i)-z(i-1))^2+(p(i)-p(i-1))^2)^0.5;
             if x>3 & x<5 & y>3 & y<5
                 t=1.4;
             elseif x>2 & x<6 & y>2 & y<6
                  t=1.3;
             elseif x>1 & x<7 & y>1 & y<7
                 t=1.2;
             elseif x>0 & x<8 & y>0 & y<8
                 t=1.1;
             else
                 t=1;
             end
          v=n*t+v;
         end
             for s=1:1:y
             w=[w,s];
             end
             for d=x:1:9
             c=(d-9)*y/(x-9);
             w=[w,c];
             end
             w=[w,0];
             w=unique(w);
             n=size(w,2);
             for i=1:1:n
             l(i)=w(i)*(x-9)/y+9;
             end
             for i=2:1:n
             u=((l(i)-l(i-1))^2+(w(i)-w(i-1))^2)^0.5;
             if x>3 & x<5 & y>3 & y<5
                 t=1.4;
                elseif x>2 & x<6 & y>2 & y<6
                  t=1.3;
                elseif x>1 & x<7 & y>1 & y<7
                 t=1.2;
                 elseif x>0 & x<8 & y>0 & y<8
                 t=1.1;
                else
                 t=1;
               end
               g=g+t*u;
            end
       
      k=g+v;
      q=[q,k];
      %x;
      %y;
    %zuixiao=[zuixiao,min(q)];
      end % while循环结束
   
    end
end
zsb=min(q)

 

但这样是分别求出AC最小值BC,发现AC与BC找的不是一个C点,估计是循环有问题,就解答~~~

该过后是这样

clear all
clc
z=[];
q=[];
g=0;
k=0;
v=0;
w=[];
zuixiao=[];
for x=1:1:8   
    for y=1:1:8 
         for m=0:1:x                   %循环找出x整数直线与AP的交点
          z=[z,m];
         end
         for n=9:-1:y
          d=(n-9)*x/(y-9);            
          z=[z,d];
         end
         z=unique(z);
         m=size(z,2);
          for i=2:1:m 
            p(1)=((y-9)/x)*z(1)+9;%要求多少个距离
            p(i)=((y-9)/x)*z(i)+9;
            n=((z(i)-z(i-1))^2+(p(i)-p(i-1))^2)^0.5;
             if x>3 & x<5 & y>3 & y<5
                 t=1.4;
             elseif x>2 & x<6 & y>2 & y<6
                  t=1.3;
             elseif x>1 & x<7 & y>1 & y<7
                 t=1.2;
             elseif x>0 & x<8 & y>0 & y<8
                 t=1.1;
             else
                 t=1;
             end
          v=v+n*t;
         end
             for s=y:-1:0
             w=[w,s];
             end
             for d=x:1:9
             c=(d-9)*y/(x-9);
             w=[w,c];
             end
             w=unique(w);
             n=size(w,2);
        for i=2:1:n
            l(1)=w(1)*(x-9)/y+9;
           l(i)=w(i)*(x-9)/y+9;
           u=((l(i)-l(i-1))^2+(w(i)-w(i-1))^2)^0.5;
             if x>3 & x<5 & y>3 & y<5
                 t=1.4;
                elseif x>2 & x<6 & y>2 & y<6
                  t=1.3;
                elseif x>1 & x<7 & y>1 & y<7
                 t=1.2;
                 elseif x>0 & x<8 & y>0 & y<8
                 t=1.1;
                else
                 t=1;
             end
          g=g+t*u;
         end      
      k=g+v;
      q=[q,k]
    end
end
zsb=min(q)

 

可还是不对,why~~~~~~~~~~~~

@中山野鬼

@中山野鬼 v

 

@中山野鬼

顶部