Exemple #1
0
        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);
        }
Exemple #2
0
        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));
 }