例:在100米的直线上站着11个人,当前他们的位置随意的,我要让他们来均分布在这一段线上<即每10米站一个人>,要做到每个人只移动一次<在其移动过程中,不会遇到阻碍>,就到达其到达的位置。求怎样决定每个人的移动优先顺序的算法。

解决方案 »

  1.   

    定义整型数组P【0..10】分别表示11个人当前位置;
    0,10,20,..100就分别是11个人将要到达的位置;
    明显如果11个人的当前位置都是负值;或者都大于100;问题是最简单的;
    而如果11个人的位置都在0..100之间的话;
    判断有障碍的方法是P[I]>10*I and P[I-1]>10*I 或者是 P[I]<10*I and P[I+1]<10*I 
    按照这种思路我们可以写出如下程序:
    var P: array[0..10] of integer;
        I: integer;
        LL: boolean;
    begin
      //为11个人的当前位置赋值;  while 1 do  
      begin
       for I := 0 to 10 do
       begin
       LL := true;
       
       if P[I] = 10*I then continue
       else if P[I] > 10*I and P[I-1] < 10*I then
       begin
         P[I] := 10×I;   //将第I个人移动到他的位置;
         LL := false;
       end
       else if P[I]<10*I and P[I+1]>10*I then
       begin
         P[I] := 10*I;   //将第I个人移动到他的位置
         LL := false;
       end
       esle LL := false;
       end;
       
       if LL break;
      end;
    end;