Exemplo n.º 1
0
        public void DoAlgPairShift()
        {
            StringBuilder message = new StringBuilder();
            message.AppendFormat("[date: {0}]\n", DateTime.Now);
            message.AppendFormat("file: {0}\n", mainForm.ctlTabControl.SelectedTab.Text);
            message.AppendLine("--- Pair Shifts Algorithm ---");
            if (Network.CheckNetwork() == 0)
            {
                message.AppendLine("checking: graph checking ... OK");
                if (Network.Areas.Count > 1)
                {
                    message.AppendLine("checking: network is segmented ... YES");
                }
                else
                {
                    message.AppendLine("checking: network is segmented ... NO");
                }

                AlgDejkstra algDejkstra = new AlgDejkstra();
                AlgPairShift algPairShift = new AlgPairShift();
                foreach (Area area in Network.Areas)
                {
                    if (area.Routers.Count > 0)
                    {
                        Router root = area.Routers[0];
                        foreach (Router router in SelectedElements)
                        {
                            if (area.Routers.Contains(router) == true)
                            {
                                root = router;
                                break;
                            }
                        }
                        Network.ResetEquipment(area);
                        algDejkstra.DoAlg(root);
                        algPairShift.DoAlg(area);
                        Network.UpdateGraphics(area);
                        // ********************* DEL
                        message.AppendLine("------------------------");
                        foreach (Router router in area.Routers)
                        {
                            message.AppendLine("Router " + router.Name);
                            foreach (Port port in router.Ports)
                            {
                                message.AppendFormat("{0}: {1} ", port.ShortName, root.Name);
                                foreach (Port p in port.Route)
                                {
                                    message.Append(" " + p.Router.Name);
                                }
                                message.Append(" = " + port.Distance.ToString());
                                message.AppendLine();
                                message.Append("");
                            }
                            message.AppendFormat("{0}: {1} ", router.Name, root.Name);
                            foreach (Port p in router.MainRoute)
                            {
                                message.Append(" " + p.Router.Name);
                            }
                            message.Append(" = " + router.DistancePointer.ToString());
                            message.AppendLine();
                            message.AppendLine();
                        }
                        message.AppendLine("\n------------------------");
                        // ********************* DEL
                    }
                }
            }
            else
            {
                message.Append("warning: gaph is not closed!\n" +
                        "execution is stopped.\n");
            }

            UpdateField();
            message.AppendLine("--- End ---");
            message.AppendLine();
            mainForm.ConsoleWrite(message.ToString());
        }