public static GraphVM GenerateClique(uint nodesCount) { GraphVM graph = new GraphVM(); // Create Nodes for (uint i = 0; i < nodesCount; i++) { graph.Nodes.Add(new GraphNodeVM() { Name = Names[i], }); } // Connect each node with every node (without itself) foreach (var node in graph.Nodes) { foreach (var neighbour in graph.Nodes.Where(n => n != node)) { var edge = new GraphEdgeVM() { Begin = node, End = neighbour, }; node.Edges.Add(edge); graph.Edges.Add(edge); } } return(graph); }
public static GraphPathVM GeneratePath(GraphVM graph, Individual individual) { GraphPathVM path = new GraphPathVM(graph); for (uint i = 1; i < individual.Length; i++) { var b = (int)individual[i]; var p = (int)individual[i - 1]; var edge = new GraphEdgeVM() { Begin = graph.Nodes[p], End = graph.Nodes[b], }; path.Edges.Add(edge); } // add last - first path.Edges.Add(new GraphEdgeVM() { Begin = path.Edges.Last().End, End = path.Edges.First().Begin, }); foreach (var edge in path.Edges) { if (!path.Nodes.Contains(edge.Begin)) { path.Nodes.Add(edge.Begin); } if (!path.Nodes.Contains(edge.End)) { path.Nodes.Add(edge.End); } } return(path); }
private double Distance(GraphEdgeVM edge) { return(Distance(edge.Begin, edge.End)); }