我不太确定如何表达这个问题,但我会尽可能具体。想象一个俄罗斯方块屏幕,只有矩形,它们以不同的形状掉落到底部。我想计算最多能放置多少个不重叠的矩形。在计算时,我只关心矩形的长度,或者说是平行于x轴的线段。
因此,基本上我有一个自定义类型,包含起始点和结束点,都是0到100之间的整数。假设我们有一个矩形列表,从1到n。 除非第n-1个矩形的结束点小于第n个矩形的起始点,否则rectangle_n.start(除非它是距离原点最近的矩形)必须大于rectangle_(n-1).end,以便它们永远不会重叠。我从一个包含随机数字的文件中读取矩形坐标(两个坐标都是x轴坐标)。
例如,考虑以下矩形类型对象列表:
我们可以发现第三个物体的起始坐标小于前一个矩形的结束坐标,而前一个矩形的结束坐标是5。因此,在对该列表进行排序时,我需要删除第二个或第三个物体,以避免它们重叠。
因此,基本上我有一个自定义类型,包含起始点和结束点,都是0到100之间的整数。假设我们有一个矩形列表,从1到n。 除非第n-1个矩形的结束点小于第n个矩形的起始点,否则rectangle_n.start(除非它是距离原点最近的矩形)必须大于rectangle_(n-1).end,以便它们永远不会重叠。我从一个包含随机数字的文件中读取矩形坐标(两个坐标都是x轴坐标)。
例如,考虑以下矩形类型对象列表:
rectangle_list {start, end} = {{1,2}, {3,5}, {4,7} {9,12}}
我们可以发现第三个物体的起始坐标小于前一个矩形的结束坐标,而前一个矩形的结束坐标是5。因此,在对该列表进行排序时,我需要删除第二个或第三个物体,以避免它们重叠。
我不确定这种问题是否有专门的名称,所以我不知道如何为其命名。我想要一个算法,能够应用于此类对象的列表,并相应地将它们排序。
我已经添加了C ++标签,因为我正在编写C ++代码,但任何语言都适用于该算法。