Beispiel #1
0
        /*
         * RemoveArc removes from the graph an arc between two nodes.
         */
        public void RemoveArc(Node node1, Node node2)
        {
            //System.Console.WriteLine("\nIn RemoveArc()");

            if (!ContainsArc(node1.Name + "<-->" + node2.Name))
            {
                System.Console.WriteLine("Arc not found in list of arcs; Nothing done");

                //System.Console.WriteLine("Leaving RemoveArc()\n");

                return;
            }

            // Remove actual connection between nodes

            if (node1.NodeConnectedViaNorthArcOption.Equals(node2))
            {
                node1.ResetSpecifiedArcOptionToDefault("north");

                node2.ResetSpecifiedArcOptionToDefault("south");
            }
            else if (node1.NodeConnectedViaEastArcOption.Equals(node2))
            {
                node1.ResetSpecifiedArcOptionToDefault("east");

                node2.ResetSpecifiedArcOptionToDefault("west");
            }
            else if (node1.NodeConnectedViaSouthArcOption.Equals(node2))
            {
                node1.ResetSpecifiedArcOptionToDefault("south");

                node2.ResetSpecifiedArcOptionToDefault("north");
            }
            else if (node1.NodeConnectedViaWestArcOption.Equals(node2))
            {
                node1.ResetSpecifiedArcOptionToDefault("west");

                node2.ResetSpecifiedArcOptionToDefault("east");
            }
            else
            {
                System.Console.WriteLine("Error; Connection between nodes not found");

                //System.Console.WriteLine("Leaving RemoveArc()\n");

                return;
            }

            // Remove arc from set

            string arcName1 = node1.Name + "<-->" + node2.Name;

            string arcName2 = node2.Name + "<-->" + node1.Name;

            System.Console.WriteLine("Looking for arc in set by name of " + arcName1 + " or " + arcName2);

            foreach (Arc arc in _arcs)
            {
                if (arc.Name.Equals(arcName1) || arc.Name.Equals(arcName2))
                {
                    System.Console.WriteLine("Arc " + arc.Name + " found in list of arcs and being removed");

                    _arcs.Remove(arc);

                    break;  // The list of arc has shrunk by one. If the foreach is not broken it will
                    // eventually attempt to access one more than the list's current size.
                }
            }

            //System.Console.WriteLine("Leaving RemoveArc()\n");
        }