如何解决如何通过回溯解决这个座位问题?
我遇到了以下回溯/座位问题:
假设您有一个 k * k 大小的房间,这意味着您正好有 k * k 个可用座位和 n 人你必须坐下。此外,每个人都有自己特定的半径,他们真的不希望其他人坐在其中。
任务是编写一个算法以伪代码或纯文本形式通过回溯找到任何座位计划(不一定是完美的)其中每个人都不在其他人的半径范围内或表明这种座位安排是不可能的。请注意,算法的时间复杂度并不重要。
为了进一步说明这一点,假设我们有 k = 8,这意味着我们总共有 8x8 个座位。对于 n=3 的人,我们有半径为 3 的红色、半径为 2 的蓝色和半径为 1 的黄色。 在下图中,我们有一个无效座位计划的示例,因为 Blue 显然在 Red 的半径内。许多可能的有效座位计划之一是座位 (0,0) 上的红色、座位 (4,0) 上的蓝色和座位 (7,0) 上的黄色。
我遇到的问题:
我的尝试/伪代码假设 n 人的数组是一个半径数组,按他们的大小降序排序。 然后我们在各自的 for 循环中迭代 x 和 y 坐标。我们将最大的元素放置在 (0,0) 处,然后选择下一个元素/半径并检查是否可以将其放置在下一个 (x,y) 中。如果人 1 在人 2 的半径内,反之亦然,则该位置无效,我们继续下一个 (x,y)。如果位置有效,我们继续下一个元素/半径并重复该过程,直到我们用尽n中的所有半径/人。
即使这可能在实际代码中也能工作,但我无法理解我应该如何实现伪代码所需的回溯方面。我确实相信我了解回溯工作原理的基础知识,但我似乎无法弄清楚如何将这个过程实施到这个问题中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。