例:在100米的直线上站着11个人,当前他们的位置随意的,我要让他们来均分布在这一段线上<即每10米站一个人>,要做到每个人只移动一次<在其移动过程中,不会遇到阻碍>,就到达其到达的位置。求怎样决定每个人的移动优先顺序的算法。
解决方案 »
- 一年就快到头了,这是一个......
- 大容量数据导出问题
- fastreport 我使用了memo控件,他的字体来源来源于parentfont:=true;,当运行时候,就只能显示一半字符串了
- 用Access做的数据库,遇到一点小问题,请大家来帮忙!
- 请问QRChart控件在哪里能找到?
- DBLookupComboBox1,如何让它默认选择第一项?
- 有关raw socket,大家帮帮忙。
- 如何给Panel组件加滚动条
- 模拟器~~
- 我在ftp.borland.com下了个D5EntUpdate.exe升级程序,安装时要系列号,谁知道是什么?
- 谁知道他最后说的那个技巧是什么吗
- 剪贴板里的数据怎么能存到数据库里?
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;