分治算法---poj1723【士兵排队】Soldier

博客探讨了如何使用分治算法解决poj1723问题,即给定坐标点将其排列在一条水平线上,使得移动步数最少。首先通过找到y坐标的中位数确定水平线,然后处理x坐标,将点转化为距离目标位置的差值,再次应用分治策略。源代码未提供。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:给出n个坐标表示n个点,并将这n个point排列在一条水平线上,要求挨个排序,最后达到  (x,y), (x+1, y), (x+2,y)……,求出移动的最少步数。


算法思想:分治算法+little中位数        (ps: 还未练习到中位数)


解题思路:要求排列成有序的一横排(默认为递增序列),可分步进行,根据复杂程度分为x和y两步,且先移动y坐标先将每个point移至一水平线(存在2个或以上的点重合在一起的情况)。要求总的移动步数最少,则x轴和y轴的移动步数均为最少。故找出所有点y坐标的中位数,假设为y_middle, 则y=y_middle直线表示排序后的水平直线。x轴时,先进行一次排序后假设水平线上的n个点存储在数组a[n]中,则第一个点a[0]最终排序后的位置是addr,a[1]的最终位置是(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值