C++ 查找算法类

C++ 查找算法类,c++,algorithm,C++,Algorithm,我有作业要做,找到/创建解决这个问题的算法: n-桶数 k-不同颜色块的数量 p_i-铲斗编号i的容量 c_i-颜色为i的块数 假设铲斗位于圆的圆周上 要做什么: 每个桶最多只能有一块颜色。基本操作是将挡块转移到相邻铲斗 我不希望这个问题得到解决,现在我想知道这是哪一类问题-图还是其他什么 非常感谢 编辑:我必须用C++编写.< /P> 编辑:问题示例 1铲斗容量5:1黄色2绿色 2铲斗容量5:1白色2黄色 3铲斗容量2:2蓝色 4铲斗容量7:1绿色 算法必须使每个桶最多包含一个颜色块

我有作业要做,找到/创建解决这个问题的算法:

  • n
    -桶数
  • k
    -不同颜色块的数量
  • p_i
    -铲斗编号i的容量
  • c_i
    -颜色为i的块数
假设铲斗位于圆的圆周上

要做什么:
每个桶最多只能有一块颜色。基本操作是将挡块转移到相邻铲斗

我不希望这个问题得到解决,现在我想知道这是哪一类问题-图还是其他什么

非常感谢

编辑:我必须用C++编写.< /P> 编辑:问题示例

  • 1铲斗容量5:1黄色2绿色
  • 2铲斗容量5:1白色2黄色
  • 3铲斗容量2:2蓝色
  • 4铲斗容量7:1绿色
算法必须使每个桶最多包含一个颜色块

编辑:我的想法


我正在考虑在搜索树中生成正确放置块的所有可能性,但我不确定如何计算此解决方案中的步骤。另一个想法是“清扫”不应该在里面的每个桶块。最后一个想法是从块透视图和“扫描”桶的角度看问题,其中包括每种颜色的多个块。但是我找不到任何强有力的办法来解决这个问题

编辑:我的算法

  • 数一数每种颜色有多少块
  • 按降序排序
  • 对于从最多颜色开始的每种颜色:
  • 对于每个铲斗: 1.如果此桶包含超过1块颜色,请转到2。否则继续。 2.试着把色块放到相邻的桶里。如果任何一个邻居没有足够的地方,就把邻居的木块换到这个木桶上,然后把色块换到这个邻近的木桶上

  • 乍一看,我建议使用数据结构。但是如果不知道你要用什么语言写,我想没有人能进一步帮助你

    例如,您可以创建一个
    双链接列表
    ,并用类型为
    myObject
    的成员填充它

    在Java中,
    myObject
    将是一个
    。在C语言中,
    myObject
    将是一个
    Struct
    ,等等

    您希望链接这些对象,以便每个对象都有对其两个相邻对象的引用。然后,您可以将一个块传递给“邻居”(链接的)存储桶

    虽然您如何创建数据结构在很大程度上取决于语言


    编辑:在一个简单的情况下,您可以创建对象的
    数组
    (Java
    、C
    结构
    ,等等),然后使用
    n-1
    (左)和
    n+1
    (右)给邻居块,其中
    n
    是数组中的当前存储桶。

    什么问题?该算法应该做什么?到目前为止您尝试了什么?你认为答案会是什么?请给我们展示更多的努力。在给你这个作业之前,你的讲师没有给你任何关于算法的信息?我在考虑搜索树,在那里我将生成所有正确放置块的可能性,但我不确定如何计算这个解决方案中的步骤。另一个想法是“清扫”不应该在里面的每个桶块。最后一个想法是从块透视图和“扫描”桶的角度看问题,其中包括每种颜色的多个块。但是我找不到任何强有力的方法来解决这个问题。你能选择哪个相邻的bucket,或者所有的传输都必须在同一个方向吗?在这种情况下,双链表比简单数组有什么优势?我们得到了
    n
    ,因此我们的数据结构具有固定的大小。您可以创建一个
    n
    对象的
    数组(如Java
    类或C-
    结构
    )。双链接列表的设计要复杂一些,但根据我的经验,它提供了更多的功能。这完全取决于你需要什么。但是,考虑到您的需要,
    数组
    可能更适合您。在这种情况下,您可以创建对象的
    数组
    ,然后使用
    n-1
    n+1
    给相邻的块,其中
    n
    是数组中的当前bucket。您可能更喜欢
    (k+n-1)mod n
    (k+1)mod n
    (假设
    k
    是当前缓冲区)确保第n个
    n
    之后的下一个元素将是第一个,而第一个元素之前的元素将是第n个
    n