Esempio n. 1
0
    public Boolean EqualByOutput(RelatedNode otherNode)
    {
        if (otherNode == null)
        {
            return(false);
        }
        if (nextNodes.Count != otherNode.nextNodes.Count)
        {
            return(false);
        }
        var nextNodesCurrentNode = GetNextNodes().OrderBy(el => el.Id);
        var nextNodesOtherNode   = otherNode.GetNextNodes().OrderBy(el => el.Id);

        for (Int32 index = 0; index < nextNodes.Count; index++)
        {
            var nextNodeCurrentNode = nextNodesCurrentNode.ElementAt(index);
            var nextNodeOtherNode   = nextNodesOtherNode.ElementAt(index);
            if (nextNodeCurrentNode.Id != nextNodeOtherNode.Id)
            {
                return(false);
            }
            var firstSymbols  = GetIntersectSymbolsWithNext(nextNodeCurrentNode);
            var secondSymbols = otherNode.GetIntersectSymbolsWithNext(nextNodeOtherNode);
            if (firstSymbols.Count() != secondSymbols.Count())
            {
                return(false);
            }
            if (firstSymbols.Union(secondSymbols).Count() != firstSymbols.Count())
            {
                return(false);
            }
        }
        return(true);
    }
Esempio n. 2
0
    public Boolean ExistPathToEnd(String symbols)
    {
        RelatedNode current = this;

        foreach (var symbol in symbols)
        {
            current = current.nextNodes.FirstOrDefault(el =>
                                                       current.GetIntersectSymbolsWithNext(el).Contains(symbol));
            if (current == null)
            {
                return(false);
            }
        }
        return(current.IsEnd());
    }