Esempio n. 1
0
        public static void Main()
        {
            Solution solution = new Solution();

            // lexical order
            {
                IList <int>   result = solution.LexicalOrder(10);
                StringBuilder sb     = new StringBuilder();
                foreach (int x in result)
                {
                    sb.Append(x);
                    sb.Append(", ");
                }
                Console.WriteLine(sb.ToString());
            }

            // clone graph
            {
                UndirectedGraphNode nodeZero = new UndirectedGraphNode(0);
                UndirectedGraphNode nodeOne  = new UndirectedGraphNode(1);
                UndirectedGraphNode nodeTwo  = new UndirectedGraphNode(2);

                nodeZero.neighbors.Add(nodeOne);
                nodeZero.neighbors.Add(nodeTwo);
                nodeOne.neighbors.Add(nodeTwo);
                nodeTwo.neighbors.Add(nodeTwo);

                Console.WriteLine($"\noriginal is : {solution.PrintGraph(nodeZero)}\n");
                UndirectedGraphNode newNode = solution.CloneGraph(nodeZero);
                Console.WriteLine($"\nnew node is : {solution.PrintGraph(newNode)}\n");
            }
        }
Esempio n. 2
0
        public string PrintGraph(UndirectedGraphNode node, Dictionary <int, UndirectedGraphNode> map = null)
        {
            string result = string.Empty;

            {
                if (map == null)
                {
                    map = new Dictionary <int, UndirectedGraphNode>();
                }

                if (!map.ContainsKey(node.label))
                {
                    result = node.label.ToString();
                    map.Add(node.label, node);

                    foreach (UndirectedGraphNode one in node.neighbors)
                    {
                        result += ", " + one.label.ToString();
                    }
                    result += "#";

                    foreach (UndirectedGraphNode one in node.neighbors)
                    {
                        result += PrintGraph(one, map);
                    }
                }
            }
            return(result);
        }
Esempio n. 3
0
        public UndirectedGraphNode CloneGraph(UndirectedGraphNode node)
        {
            if (node == null)
            {
                return(null);
            }

            UndirectedGraphNode newNode = new UndirectedGraphNode(node.label);
            Dictionary <int, UndirectedGraphNode> map = new Dictionary <int, UndirectedGraphNode>();

            CloneGraph(node, newNode, map);
            return(newNode);
        }
Esempio n. 4
0
        public void CloneGraph(UndirectedGraphNode oldNode, UndirectedGraphNode newNode, Dictionary <int, UndirectedGraphNode> map)
        {
            if (map.ContainsKey(newNode.label))
            {
                return;
            }

            map.Add(newNode.label, newNode);
            foreach (UndirectedGraphNode neighbor in oldNode.neighbors)
            {
                UndirectedGraphNode newNeighbor = new UndirectedGraphNode(neighbor.label);
                newNode.neighbors.Add(newNeighbor);
                CloneGraph(neighbor, newNeighbor, map);
            }
        }