Esempio n. 1
0
 public static IEnumerable <TVertex> GetNeighbours <TVertex, TEdge>(
     this IBidirectionalGraph <TVertex, TEdge> graph, TVertex vertex, EdgeDirection edgeDirection)
     where TEdge : IEdge <TVertex>
 {
     return(edgeDirection == EdgeDirection.In
         ? graph.GetInNeighbours(vertex)
         : graph.GetOutNeighbours(vertex));
 }
        public override double FindProbability(double[] vector)
        {
            var nodes       = new Queue <Node>();
            var root        = this.GetRootNode();
            var probability = root.GetProbability(vector[root.Id], 0);

            nodes.Enqueue(root);

            while (nodes.Count > 0)
            {
                var parentNode = nodes.Dequeue();

                foreach (var neighbourNode in visualGraph.GetOutNeighbours(parentNode))
                {
                    double x = neighbourNode.GetProbability(vector[neighbourNode.Id], vector[parentNode.Id]);
                    probability *= x;
                    nodes.Enqueue(neighbourNode);
                }
            }

            return(probability);
        }
Esempio n. 3
0
 public static IEnumerable <TVertex> GetAllNeighbours <TVertex, TEdge>(
     this IBidirectionalGraph <TVertex, TEdge> graph, TVertex vertex)
     where TEdge : IEdge <TVertex>
 {
     return(graph.GetInNeighbours(vertex).Union(graph.GetOutNeighbours(vertex)));
 }