Esempio n. 1
0
        public static LinkedListNode <int> Flatten(MultiNode head)
        {
            if (head == null)
            {
                return(null);
            }

            Queue <MultiNode> q      = new Queue <MultiNode>();
            LinkedList <int>  result = new LinkedList <int>();

            q.Enqueue(head);

            while (q.Count > 0)
            {
                MultiNode temp = q.Dequeue();
                result.AddLast(temp.Data);

                if (temp.Down != null)
                {
                    q.Enqueue(temp.Down);
                }
                if (temp.Right != null)
                {
                    q.Enqueue(temp.Right);
                }
            }

            return(result.First);
        }
Esempio n. 2
0
        static void findWordLadder(HashSet <string> dict, string start, string target)
        {
            MultiNode node = new MultiNode(start);

            buildTree(dict, start, node, "");

            getHeights(node);
            MultiNode temp = new MultiNode(string.Empty);

            while (node.Children.Count != 0)
            {
                int minHeight = 9999999;
                Console.Write(node.Value + " ");
                for (int i = 0; i < node.Children.Count; i++)
                {
                    if (node.Children[i].Height <= minHeight)
                    {
                        minHeight = node.Children[i].Height;
                        temp      = node.Children[i];
                    }
                }

                node = temp;
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            MultiNode head = new MultiNode(5);

            MultiNode list1 = new MultiNode(1);

            MultiNode sub = new MultiNode();

            sub.Right = new MultiNode(10);
            MultiNode list1Sub = new MultiNode(12);

            list1Sub.Right = sub;
            list1Sub.Down  = new MultiNode(3);

            list1.Down  = list1Sub;
            list1.Right = new MultiNode(4);



            head.Right = list1;

            LinkedListNode <int> test = Flatten(head);
            var flattened             = FlattenAlt(head);

            Console.ReadLine();
        }
Esempio n. 4
0
    //TODO use NodeType to categorize Types.
    public static BaseNode CreateNode(ActionNodeData aData)
    {
        if (aData.NodeType == null)
        {
            Debug.LogError("Type not set");
            return(null);
        }

        aData.GUID          = string.IsNullOrEmpty(aData.GUID) ? Guid.NewGuid().ToString() : aData.GUID;
        aData.OutputPortIDs = aData.OutputPortIDs ?? new List <string>();

        //The copy prevent the node to modify the list in the ActionNodeData
        List <string> copy = new List <string>();

        foreach (var outputPort in aData.OutputPortIDs)
        {
            copy.Add(outputPort);
        }

        BaseNode node;
        Type     type = Type.GetType(aData.NodeType);

        if (type == typeof(ChangeSceneNode))
        {
            node = ChangeSceneNode.Create("Change Scene", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(StartNode))
        {
            node = StartNode.Create("Start Node", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(ConditionalNode))
        {
            node = ConditionalNode.Create("Conditional", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(MultiNode))
        {
            node = MultiNode.Create("Multi Output", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(ExitNode))
        {
            node = ExitNode.Create("Exit Node", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(RandomNode))
        {
            node = RandomNode.Create("Random Node", aData.Position, aData.GUID, copy);
        }
        else if (type == typeof(TakeObjectNode))
        {
            node = TakeObjectNode.Create("Take Object", aData.Position, aData.GUID, copy);
        }
        else
        {
            throw new NotImplementedException($"Node type {type} not handled in NodeFactory");
        }

        node?.SetSerializedScript(aData.SerializedScript);
        return(node);
    }
Esempio n. 5
0
        public Graph gen_test()
        {
            ret = new Graph();

            ret.bbs_after  = new List <List <int> >(new List <int> [13]);
            ret.bbs_before = new List <List <int> >(new List <int> [13]);
            ret.bb_starts  = new List <BaseNode>(new BaseNode[13]);
            ret.bb_ends    = new List <BaseNode>(new BaseNode[13]);

            n = new MultiNode[13];

            for (int i = 0; i < 13; i++)
            {
                n[i]              = new MultiNode();
                n[i].bb           = i;
                ret.bb_starts[i]  = n[i];
                ret.bb_ends[i]    = n[i];
                ret.bbs_after[i]  = new List <int>();
                ret.bbs_before[i] = new List <int>();
                ret.blocks.Add(new List <BaseNode> {
                    n[i]
                });
            }

            AddEdge(1, 2);
            AddEdge(2, 3);
            AddEdge(3, 3);
            AddEdge(3, 4);
            AddEdge(4, 13);
            AddEdge(1, 5);
            AddEdge(5, 6);
            AddEdge(6, 4);
            AddEdge(6, 8);
            AddEdge(8, 13);
            AddEdge(8, 5);
            AddEdge(5, 7);
            AddEdge(7, 8);
            AddEdge(7, 12);
            AddEdge(1, 9);
            AddEdge(9, 10);
            AddEdge(10, 12);
            AddEdge(12, 13);
            AddEdge(9, 11);
            AddEdge(11, 12);

            ret.Starts.Add(n[0]);

            return(ret);
        }
Esempio n. 6
0
        static void buildTree(HashSet <string> dict, string currentWord, MultiNode root, string prevWord)
        {
            HashSet <string> visited = new HashSet <string>();

            foreach (string w in dict)
            {
                if (isAdjascent(currentWord, w) && prevWord != w)
                {
                    MultiNode tempNode = new MultiNode(w);
                    root.Children.Add(tempNode);
                    visited.Add(w);
                    buildTree(dict, w, tempNode, currentWord);
                }
            }
        }
Esempio n. 7
0
        private static void AddToLast(MultiNode node, MultiNode head)
        {
            if (head == null)
            {
                head = node;
            }

            MultiNode curr = head;

            while (curr.Right != null)
            {
                curr = curr.Right;
            }

            curr.Right = node;
        }
Esempio n. 8
0
        public static MultiNode FlattenAlt(MultiNode head)
        {
            if (head == null)
            {
                return(null);
            }

            Queue <MultiNode> q          = new Queue <MultiNode>();
            MultiNode         resultHead = null;
            MultiNode         currResult = null;

            q.Enqueue(head);
            while (q.Count > 0)
            {
                MultiNode current = q.Dequeue();

                if (current.Right != null)
                {
                    q.Enqueue(current.Right);
                }
                if (current.Down != null)
                {
                    q.Enqueue(current.Down);
                }

                current.Right = null;
                current.Down  = null;

                if (resultHead == null)
                {
                    resultHead = current;
                    currResult = resultHead;
                }
                currResult.Right = current;
                currResult       = currResult.Right;
                //else
                //    AddToLast(current, resultHead);
            }

            return(resultHead);
        }
Esempio n. 9
0
        static int getHeights(MultiNode n)
        {
            if (n.Children.Count == 0)
            {
                return(1);
            }
            else
            {
                int maxHeight = 0;
                foreach (var t in n.Children)
                {
                    int height = getHeights(t);
                    if (height > maxHeight)
                    {
                        maxHeight = height;
                    }
                }

                n.Height = maxHeight + 1;

                return(n.Height);
            }
        }
Esempio n. 10
0
        private bool ValidateRuleData()
        {
            if (string.IsNullOrWhiteSpace(txtID.Text))
            {
                pnlInfo.Visible = true;
                lblInfo.Text    = "ID cannot be blank";
                return(false);
            }
            if (string.IsNullOrWhiteSpace(txtName.Text))
            {
                pnlInfo.Visible = true;
                lblInfo.Text    = "Name cannot be blank";
                return(false);
            }

            if (string.IsNullOrWhiteSpace(Expression))
            {
                Root = new MultiNode();
                Root.AddNode(new CriteriaNode());
                pnlInfo.Visible = false;
            }
            pnlInfo.Visible = false;
            return(true);
        }
Esempio n. 11
0
	void OnEnable()
	{
		mn = target as MultiNode;
		mn.GetChildNodes();
	}