我遇到三角形的问题。
我有6个三角形,例如:
每个三角形的每边都有一个值。问题是我可以移动三角形,我可以旋转它们。我必须像这样创建一个六边形:
我必须添加三角形的外侧并获得最高分。在这个例子中是152。
内侧必须相等 例如3,3,2,2和5,5,7,7其中4 4和1 1。
我在C ++中这样做。
我将每个三角形保存在一个数组中。
int triangle[6][3];
for(int i=0;i<6;i++)
cin>>triangle[i][0]>>triangle[i][1]>>triangle[i][2];
我打算将数组的最后一个元素与其他元素进行比较,但它不起作用。
谁能给我一个想法来解决这个问题?因为我不知道如何为三角形生成所有可能的组合以创建六边形,以及在其他时间不在同一数组中搜索的方法,以及如何添加以获得分数。
可能存在无法形成六边形的情况。
最后一个元素可能是我不能形成三角形,然后我需要旋转三角形来形成六边形。
答案 0 :(得分:1)
我会发展这种逻辑。你编写代码。
答案 1 :(得分:1)
这是一个算法:
选择一个三角形。称之为 A 。 (在本例中,1-4-20三角形。)
迭代 A 的两侧;选择一侧(例如1)并假设它将是外侧。下一侧(4)必须是内侧,因此找到可以匹配该侧的所有其他三角形(在这种情况下只有一个,4-7-50)。迭代这个列表,寻找下一个内侧的匹配(50)。继续,直到找到所有可能的六边形,以选择 A 的一面。
一旦您遍历 A 的所有方面并找到所有可能的六边形,请选择得分最高的那个。
难道有一部分难吗?您需要有关数据结构的帮助吗?
修改
我建议学习更好的数组容器,但这可能是另一天。
该函数应该将两个数组作为参数,并返回一个。 (也许有一些数字表示数组的长度。)两个参数是1)部分六边形,2)其余的三角形。返回值是可以从那些中制作的最佳六边形;它可能是空的。
假设我们用
调用该函数{(3,1,5)}, {(1,4,20), (50,2,3), (5,2,7), (7,5,20), (4,7,50)}
该函数查找5的匹配项,并找到两个可能的匹配项:(5,2,7)和(5,20,7)。所以它进行两次递归调用,
{(3,1,5), (5,2,7)}, {(1,4,20), (50,2,3), (7,5,20), (4,7,50)}
和
{(3,1,5), (5,20,7)}, {(1,4,20), (50,2,3), (5,2,7), (4,7,50)}
它从这些调用中接收两个六边形(最多),比较它们,然后返回更好的六边形。