Exemplo n.º 1
0
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                //выбираем критические вершины и упорядочиваем их в порядке уменьшения важности
                currentTimeTable = new TimeTable(numbTimeTable);
                int constantTotalTime = 480;//пусть 8 часов
                int currentTotalTime = 0;
                List<Vertex> importantVertices = new List<Vertex>() { };
                List<Vertex> routVertices = new List<Vertex>() { };
                foreach (Vertex ve in vertices)
                {
                    if ((ve.supply <= 0) && (ve.vertexID != 0))
                    {
                        importantVertices.Add(ve);
                    }
                }
                //выбираем первую вершину их списка важных вершины и пытаемся посетить остальные
                int currentNumb = 0;
                if (importantVertices.Count > 0)
                {
                    routVertices.Add(vertices[0]);
                    currentNumb += 1;
                    foreach (Vertex ve in importantVertices)
                    {
                        if (currentTotalTime + A[routVertices[currentNumb - 1].vertexID, ve.vertexID] + ve.duration + A[ve.vertexID, 0] <= constantTotalTime)
                        {
                            routVertices.Add(ve);
                            currentNumb += 1;
                        }
                    }
                    routVertices.Add(vertices[0]);
                    currentNumb += 1;
                }
                //посещаем выбранные вершины
                for (int i = 0; i < routVertices.Count; i++)
                {
                    currentTimeTable.vertices.Add(routVertices[i]);
                    routVertices[i].DayWithVisit();
                }
                timeTables.Add(currentTimeTable);
                numbTimeTable += 1;
                //проходит день
                for (int i = 0; i < vertices.Count; i++)
                {
                    if (vertices[i].vertexID != 0)
                    {
                        vertices[i].DayWithoutVisit();
                    }
                }
                //выводим результат
                richTextBox1.Text += "\nДень: " + currentTimeTable.timeTableID.ToString() + ".\n";
                foreach (Vertex ve in currentTimeTable.vertices)
                {
                    richTextBox1.Text += ve.vertexID.ToString() + " ";
                }
                richTextBox1.Text += "\n";

                FormObjectsResize();
                GraphVisualization();
            }
            catch
            {
                richTextBox1.Text = "Ошибка";
            }
        }
Exemplo n.º 2
0
        List<Vertex> vertices; //список вершин

        #endregion Fields

        #region Constructors

        public Form1()
        {
            InitializeComponent();
            try
            {
                vertices = new List<Vertex>() { };
                edges = new List<Edge>() { };
                timeTables = new List<TimeTable>() { };
                currentVertex = new Vertex(0);
                currentEdge = new Edge(0);
                currentTimeTable = new TimeTable(0);
                vertexSelection = false;
                numbVertex = 0;
                numbEdge = 0;
                numbTimeTable = 0;

                FormObjectsResize();
                GraphVisualization();
            }
            catch { }
        }