Имеется лист массивов строк(
List<string[]>
), где каждый элемент листа состоит из 2-х строк и является уникальным, а в паре не может быть двух одинаковых значений (не может быть "[Ntv, Ntv]"). Требуется создать лист уникальных треугольников, где вершины это значения пар. Необходим именно алгоритм, до которого я всё никак не могу допереть.
Пример готового треугольника:
Triangles.Add(new Triangle(X, Y, Z))
, где X=[Ntv, Tbh], Y=[Vyt, Tbh], Z=[Vyt, Ntv]
Пример листа:
[
[Ntv, Tbh],
[Vyt, Tbh],
[Roh, Vyt],
[Roh, Ntv],
[Vyt, Ntv]
...
]
Имеется код на C#, но он работает не корректно (есть повторяющиеся треугольника, у которых вершины имеют разную очередность).
Сам код:
List<string[]> pairs = new List<string[]>();
List<Triangle> Triangles = new List<Triangle>();
foreach (string x in pairs)
{
string[] X = pairs;
foreach (string y in pairs)
{
string[] Y = pairs;
if ((X[0] == Y[0] || X[0] == Y[1] || X[1] == Y[0] || X[1] == Y[1]) && !Equals(X, Y))
{
foreach (string z in pairs)
{
string[] Z = pairs;
if (
X[0] == Y[0] && ((Z[0] == X[1] && Z[1] == Y[1]) || (Z[1] == X[1] && Z[0] == Y[1])) ||
X[0] == Y[1] && ((Z[0] == X[1] && Z[1] == Y[0]) || (Z[1] == X[1] && Z[0] == Y[0])) ||
X[1] == Y[0] && ((Z[0] == X[0] && Z[1] == Y[1]) || (Z[1] == X[0] && Z[0] == Y[1])) ||
X[1] == Y[1] && ((Z[0] == X[0] && Z[1] == Y[0]) || (Z[1] == X[0] && Z[0] == Y[0]))
)
Triangles.Add(new Triangle(X, Y, Z));
}
}
}
}
Console.WriteLine(Triangles);
return Triangles;
Что у меня не так?