Как соединить все вершины графа ребрами QuickGraph C#?
Мне нужно соединить все вершины графа друг с другом так, чтобы не было повторяющихся ребер. То есть ребра (0, 3, 6) -> (4, 7, 3) и (4, 7, 3) -> (0, 3, 6) одни и те же, только разные направления, поэтому нужно в ребра графа добавить только 1 из этих вариантов. Для этого сделал метод Connect, но он работает неправильно, так как повторяющиеся ребра все так же добавляются и я не могу понять почему. Может в QuickGraph уже есть метод, реализующий это?
EDIT:
vertex и subVertex - это Vector3 из Unity (обычные координаты трехмерного пространства (X, Y, Z)).
var graph = new AdjacencyGraph<Vector3, IEdge<Vector3>>(false);
for (var i = 0; i < nodesAmount; i++)
graph.AddVertex(GenerateRandomVertex());
graph = Connect(graph);
private AdjacencyGraph<Vector3, IEdge<Vector3>> Connect(
AdjacencyGraph<Vector3, IEdge<Vector3>> graph)
{
var vertices = graph.Vertices.ToList();
foreach (var vertex in vertices)
foreach (var subVertex in vertices)
{
var edge = new Edge<Vector3>(vertex, subVertex);
var reversedEdge = new Edge<Vector3>(subVertex, vertex);
var a = vertex == subVertex;
var b = graph.Edges.ToList().Contains(edge);
var c = graph.Edges.ToList().Contains(reversedEdge);
if (!a && !b && !c)
graph.AddEdge(edge);
}
return graph;
}
Ответы (1 шт):
Вместо форича сделайте старомодные циклы по индексу.
Первый цикл по i от 0 до N-2, а второй по j от i+1 до N-1
Тогда не придётся ничего проверять