Exemplo n.º 1
0
        public void TestRoute()
        {
            var scheme = new Scheme();
            var line1  = scheme.AddLine(@"line1");
            var line2  = scheme.AddLine(@"line2");
            var line3  = scheme.AddLine(@"line3");
            var line4  = scheme.AddLine(@"line4");
            var line5  = scheme.AddLine(@"line5");
            var s1     = line1.AddStation(@"s1");
            var s2     = line2.AddStation(@"s2");
            var s3     = line3.AddStation(@"s3");
            var s4     = line4.AddStation(@"s4");
            var s5     = line5.AddStation(@"s5");
            var s1s2   = scheme.AddRelation(s1, s2, 20);
            var s1s3   = scheme.AddRelation(s1, s3, 18);
            var s1s4   = scheme.AddRelation(s1, s4, 12);
            var s1s5   = scheme.AddRelation(s1, s4, 8);
            var s2s3   = scheme.AddRelation(s2, s3, 14);
            var s2s4   = scheme.AddRelation(s2, s4, 7);
            var s2s5   = scheme.AddRelation(s2, s5, 11);
            var s3s4   = scheme.AddRelation(s3, s4, 6);
            var s3s5   = scheme.AddRelation(s3, s5, 11);
            var s4s5   = scheme.AddRelation(s4, s5, 12);

            var routes = new List <IRoute>();

            routes.Add(s1s2);
            routes.Add(s1s3);
            routes.Add(s1s4);
            routes.Add(s1s5);
            routes.Add(s2s3);
            routes.Add(s2s4);
            routes.Add(s2s5);
            routes.Add(s3s4);
            routes.Add(s3s5);
            routes.Add(s4s5);

            var r = new SchemeVisitor().VisitAllLinesByBranchAndBound(scheme);
        }
Exemplo n.º 2
0
        public UnitTest1()
        {
            #region Схема московского метро

            Scheme = new Scheme();

            var red               = Scheme.AddLine(@"Сокольническая");
            var green             = Scheme.AddLine(@"Замоскворецкая");
            var gray              = Scheme.AddLine(@"Серпуховско-Тимирязевская");
            var ring              = Scheme.AddLine(@"Кольцевая");
            var fili              = Scheme.AddLine(@"Филёвская");
            var blue              = Scheme.AddLine(@"Арбатско-Покровская");
            var butovo            = Scheme.AddLine(@"Бутовская");
            var kahovskaya        = Scheme.AddLine(@"Каховская");
            var lublino_dmitr     = Scheme.AddLine(@"Люблинско-Дмитровская");
            var kaluzhsko_rizh    = Scheme.AddLine(@"Калужско-Рижская");
            var tagansko_krasnopr = Scheme.AddLine(@"Таганско-Краснопресненская");
            var kalin             = Scheme.AddLine(@"Калининская");

            #region Серпуховско-Тимирязевская
            gray
            .AddStation(@"Бульвар Дмитрия Донского", out var don)
            .RelationTo(@"Аннино", 140)
            .RelationTo(@"Улица Академика Янгеля", 100)
            .RelationTo(@"Пражская", 130)
            .RelationTo(@"Южная", 90)
            .RelationTo(@"Чертановская", 170)
            .RelationTo(@"Севастопольская", 120, out var sevastopol)
            .RelationTo(@"Нахимовский проспект", 90)
            .RelationTo(@"Нагорная", 90)
            .RelationTo(@"Нагатинская", 100)
            .RelationTo(@"Тульская", 220)
            .RelationTo(@"Серпуховская", 180, out var serpuh)
            .RelationTo(@"Полянка", 100)
            .RelationTo(@"Боровицкая", 130, out var borov)
            .RelationTo(@"Чеховская", 130, out var chehov)
            .RelationTo(@"Цветной бульвар", 90, out var tzhvetnoy)
            .RelationTo(@"Менделеевская", 140, out var mendeleev)
            .RelationTo(@"Савёловская", 100, out var savel)
            .RelationTo(@"Дмитровская", 110)
            .RelationTo(@"Тимирязевская", 80, out var timir)
            .RelationTo(@"Петровско-Разумовская", 170, out var petrovsko)
            .RelationTo(@"Владыкино", 140, out var vladik)
            .RelationTo(@"Отрадное", 150)
            .RelationTo(@"Бибирево", 170)
            .RelationTo(@"Алтуфьево", 160);
            #endregion

            #region Замоскворецкая
            green
            .AddStation(@"Алма-Атинская")
            .RelationTo(@"Красногвардейская", 360, out var krasnogvard)
            .RelationTo(@"Домодедовская", 130)
            .RelationTo(@"Орехово", 130)
            .RelationTo(@"Царицыно", 150)
            .RelationTo(@"Кантемировская", 130)
            .RelationTo(@"Каширская", 180, out var kashir)
            .RelationTo(@"Коломенская", 210)
            .RelationTo(@"Технопарк", 180)
            .RelationTo(@"Автозаводская", 180, out var avtozavod)
            .RelationTo(@"Павелецкая", 190, out var pavel_green)
            .RelationTo(@"Новокузнецкая", 120, out var novokuz)
            .RelationTo(@"Театральная", 140, out var teatral)
            .RelationTo(@"Тверская", 100, out var tver)
            .RelationTo(@"Маяковская", 80)
            .RelationTo(@"Белорусская", 100, out var belorus_green)
            .RelationTo(@"Динамо", 160, out var dinamo)
            .RelationTo(@"Аэропорт", 160)
            .RelationTo(@"Сокол", 110)
            .RelationTo(@"Войковская", 150, out var voykov)
            .RelationTo(@"Водный стадион", 180)
            .RelationTo(@"Речной вокзал", 140)
            .RelationTo(@"Ховрино", 300);
            #endregion

            #region Сокольническая
            red
            .AddStation(@"Бульвар Рокоссовского")
            .RelationTo(@"Черкизовская", 130, out var cherkiz)
            .RelationTo(@"Преображенская площадь", 200)
            .RelationTo(@"Сокольники", 170)
            .RelationTo(@"Красносельская", 100)
            .RelationTo(@"Комсомольская", 80, out var komsomol_red)
            .RelationTo(@"Красные ворота", 90)
            .RelationTo(@"Чистые пруды", 80, out var prudi)
            .RelationTo(@"Лубянка", 90, out var lubyanka)
            .RelationTo(@"Охотный ряд", 80, out var ohotniy)
            .RelationTo(@"Библиотека им. Ленина", 110, out var biblioteka)
            .RelationTo(@"Кропоткинская", 80)
            .RelationTo(@"Парк культуры", 100, out var park_kult_red)
            .RelationTo(@"Фрунзенская", 120)
            .RelationTo(@"Спортивная", 80)
            .RelationTo(@"Воробьёвы горы", 150)
            .RelationTo(@"Университет", 180)
            .RelationTo(@"Проспект Вернадского", 150)
            .RelationTo(@"Юго-Западная", 150)
            .RelationTo(@"Тропарёво", 180)
            .RelationTo(@"Румянцево", 180)
            .RelationTo(@"Саларьево", 180);
            #endregion

            #region Кольцевая
            ring
            .AddStation(@"Парк культуры", out var park_kul_ring)
            .RelationTo(@"Октябрьская", 100, out var oktyabr)
            .RelationTo(@"Добрынинская", 90, out var dobrin)
            .RelationTo(@"Павелецкая", 90, out var pavel_ring)
            .RelationTo(@"Таганская", 110, out var tagan_ring)
            .RelationTo(@"Курская", 140, out var kursk_ring)
            .RelationTo(@"Комсомольская", 160, out var komsomol_ring)
            .RelationTo(@"Проспект Мира", 140, out var prosp_mira_ring)
            .RelationTo(@"Новослободская", 130, out var novoslob)
            .RelationTo(@"Белорусская", 110, out var belorus_ring)
            .RelationTo(@"Краснопресненская", 140, out var krasnopres)
            .RelationTo(@"Киевская", 150, out var kiev_ring);
            #endregion

            #region Филёвская
            fili
            .AddStation(@"Кунцевская", out var kunzevo_fili)
            .RelationTo(@"Пионерская", 110)
            .RelationTo(@"Филевский парк", 100)
            .RelationTo(@"Багратионовская", 100)
            .RelationTo(@"Фили", 140)
            .RelationTo(@"Кутузовская", 140)
            .RelationTo(@"Студенческая", 100)
            .RelationTo(@"Киевская", 120, out var kiev_fili)
            .RelationTo(@"Смоленская", 130)
            .RelationTo(@"Арбатская", 100)
            .RelationTo(@"Александровский сад", 70, out var aleks_sad);
            kiev_fili
            .RelationTo(@"Выставочная", 300, out var vistav)
            .RelationTo(@"Международная", 120, out var mezhdunarod);
            #endregion

            #region Арбатско-Покровская
            blue
            .AddStation(@"Щёлковская")
            .RelationTo(@"Первомайская", 130)
            .RelationTo(@"Измайловская", 180)
            .RelationTo(@"Партизанская", 180, out var partizan)
            .RelationTo(@"Семёновская", 150)
            .RelationTo(@"Электрозаводская", 110)
            .RelationTo(@"Бауманская", 140)
            .RelationTo(@"Курская", 170, out var kursk_blue)
            .RelationTo(@"Площадь Революции", 170, out var revol)
            .RelationTo(@"Арбатская", 130, out var arbat_blue)
            .RelationTo(@"Смоленская", 140)
            .RelationTo(@"Киевская", 100, out var kiev_blue)
            .RelationTo(@"Парк Победы", 240, out var park_pobedi_blue)
            .RelationTo(@"Славянский бульвар", 240)
            .RelationTo(@"Кунцевская", 120, out var kunz_blue)
            .RelationTo(@"Молодёжная", 170, out var molodezh)
            .RelationTo(@"Крылатское", 170)
            .RelationTo(@"Строгино", 480)
            .RelationTo(@"Мякинино", 240)
            .RelationTo(@"Волоколамская", 180)
            .RelationTo(@"Митино", 180)
            .RelationTo(@"Пятницкое шоссе", 150);
            #endregion

            #region Бутовская
            butovo
            .AddStation(@"Битцевский парк", out var bitz_park)
            .RelationTo(@"Лесопарковая", 180)
            .RelationTo(@"Улица Старокачаловская", 180, out var starokach)
            .RelationTo(@"Улица Скобелевская", 300)
            .RelationTo(@"Бульвар адмирала Ушакова", 100)
            .RelationTo(@"Улица Горчакова", 120)
            .RelationTo(@"Бунинская аллея", 130);
            #endregion

            #region Каховская
            kahovskaya
            .AddStation(@"Каширская", out var kashir_kah)
            .RelationTo(@"Варшавская", 120)
            .RelationTo(@"Каховская", 160, out var kah_kah);
            #endregion

            #region Люблинско-Дмитровская
            lublino_dmitr
            .AddStation(@"Петровско-Разумовская", out var petr_razum_lubl)
            .RelationTo(@"Фонвизинская", 180, out var fonviz)
            .RelationTo(@"Бутырская", 180)
            .RelationTo(@"Марьина роща", 180)
            .RelationTo(@"Достоевская", 180)
            .RelationTo(@"Трубная", 180, out var trub)
            .RelationTo(@"Сретенский бульвар", 120, out var sret_bul)
            .RelationTo(@"Чкаловская", 180, out var chkal)
            .RelationTo(@"Римская", 150, out var rim)
            .RelationTo(@"Крестьянская застава", 140, out var krest_zast)
            .RelationTo(@"Дубровка", 120, out var dubrov)
            .RelationTo(@"Кожуховская", 120)
            .RelationTo(@"Печатники", 220)
            .RelationTo(@"Волжская", 140)
            .RelationTo(@"Люблино", 150)
            .RelationTo(@"Братиславская", 200)
            .RelationTo(@"Марьино", 120)
            .RelationTo(@"Борисово", 180)
            .RelationTo(@"Шипиловская", 120)
            .RelationTo(@"Зябликово", 120, out var zyablik);
            #endregion

            #region Калужско-Рижская

            kaluzhsko_rizh
            .AddStation(@"Медведково")
            .RelationTo(@"Бабушкинская", 150)
            .RelationTo(@"Свиблово", 140)
            .RelationTo(@"Ботанический сад", 110, out var botan_sad)
            .RelationTo(@"ВДНХ", 190, out var vdnh)
            .RelationTo(@"Алексеевская", 110)
            .RelationTo(@"Рижская", 120)
            .RelationTo(@"Проспект Мира", 110, out var prosp_mira_kaluzh)
            .RelationTo(@"Сухаревская", 90)
            .RelationTo(@"Тургеневская", 80, out var turgen)
            .RelationTo(@"Китай-город", 100, out var kitay_kaluzh)
            .RelationTo(@"Третьяковская", 150, out var tretyak_kaluzh)
            .RelationTo(@"Октябрьская", 130, out var oktyabr_kaluzh)
            .RelationTo(@"Шаболовская", 100)
            .RelationTo(@"Ленинский проспект", 170, out var lenin_prosp)
            .RelationTo(@"Академическая", 170)
            .RelationTo(@"Профсоюзная", 110)
            .RelationTo(@"Новые Черёмушки", 90)
            .RelationTo(@"Калужская", 120)
            .RelationTo(@"Беляево", 150)
            .RelationTo(@"Коньково", 90)
            .RelationTo(@"Тёплый стан", 130)
            .RelationTo(@"Ясенево", 160)
            .RelationTo(@"Новоясеневская", 130, out var novoyas);

            #endregion

            #region Таганско-Краснопресненская

            tagansko_krasnopr
            .AddStation(@"Планерная")
            .RelationTo(@"Сходненская", 100)
            .RelationTo(@"Тушинская", 190)
            .RelationTo(@"Спартак", 120)
            .RelationTo(@"Щукинская", 120)
            .RelationTo(@"Октябрьское поле", 180, out var oktyabr_pole)
            .RelationTo(@"Полежаевская", 190, out var polezh)
            .RelationTo(@"Беговая", 130)
            .RelationTo(@"Улица 1905 года", 110)
            .RelationTo(@"Баррикадная", 110, out var barrikad)
            .RelationTo(@"Пушкинская", 140, out var pushkin)
            .RelationTo(@"Кузнецкий мост", 100, out var kuznez)
            .RelationTo(@"Китай-город", 70, out var kitay_t)
            .RelationTo(@"Таганская", 150, out var tagan_t)
            .RelationTo(@"Пролетарская", 120, out var prolet)
            .RelationTo(@"Волгоградский проспект", 130)
            .RelationTo(@"Текстильщики", 230)
            .RelationTo(@"Кузьминки", 160)
            .RelationTo(@"Рязанский проспект", 180)
            .RelationTo(@"Выхино", 150)
            .RelationTo(@"Лермонтовский проспект", 240)
            .RelationTo(@"Жулебино", 180)
            .RelationTo(@"Котельники", 120);

            #endregion

            #region Калининская

            kalin
            .AddStation(@"Новокосино")
            .RelationTo(@"Новогиреево", 180)
            .RelationTo(@"Перово", 140)
            .RelationTo(@"Шоссе Энтузиастов", 220)
            .RelationTo(@"Авиамоторная", 130, out var aviamotor)
            .RelationTo(@"Площадь Ильича", 160, out var ploshad_ilicha)
            .RelationTo(@"Марксистская", 150, out var marks)
            .RelationTo(@"Третьяковская", 140, out var tretyak_kalin);
            kalin
            .AddStation(@"Раменки")
            .RelationTo(@"Ломоносовский проспект", 120)
            .RelationTo(@"Минская", 240)
            .RelationTo(@"Парк Победы", 240, out var park_pobedi_kalin)
            .RelationTo(@"Шелепиха", 270, out var shelep)
            .RelationTo(@"Хорошевская", 250, out var horoshevskaya)
            .RelationTo(@"ЦСКА", 140, out var cska_kalin)
            .RelationTo(@"Петровский парк", 160, out var petrov_park);

            #endregion

            #region Переходы между ветками

            Scheme.AddRelation(borov, biblioteka, 240);                  // Библиотека им. Ленина -> Боровицкая
            Scheme.AddRelation(serpuh, dobrin, 360);                     // Серпуховская -> Добрынинская
            Scheme.AddRelation(park_kult_red, park_kul_ring, 300);       // Парк культуры -> Парк культуры
            Scheme.AddRelation(novoslob, mendeleev, 270);                // Менделеевская -> Новослободская
            Scheme.AddRelation(komsomol_red, komsomol_ring, 300);        // Комсомольская -> Комсомольская
            Scheme.AddRelation(aleks_sad, biblioteka, 300);              // Библиотека им. Ленина -> Александровский сад
            Scheme.AddRelation(kiev_fili, kiev_ring, 300);               // Киевская -> Киевская

            Scheme.AddRelation(belorus_green, belorus_ring, 300);        // Белорусская -> Белорусская
            Scheme.AddRelation(tver, chehov, 360);                       // Тверская -> Чеховская
            Scheme.AddRelation(teatral, ohotniy, 240);                   // Театральная -> Охотный ряд
            Scheme.AddRelation(pavel_ring, pavel_green, 360);            // Павелецкая -> Павелецкая

            Scheme.AddRelation(kursk_blue, kursk_ring, 360);             // Курская -> Курская
            Scheme.AddRelation(revol, teatral, 240);                     // Театральная -> Площадь Революции
            Scheme.AddRelation(arbat_blue, aleks_sad, 300);              // Арбатская -> Александровский сад
            Scheme.AddRelation(arbat_blue, borov, 240);                  // Арбатская -> Боровицкая
            Scheme.AddRelation(kiev_blue, kiev_fili, 360);               // Киевская -> Киевская (фили)
            Scheme.AddRelation(kiev_blue, kiev_ring, 300);               // Киевская -> Киевская (кольцо)
            Scheme.AddRelation(kunz_blue, kunzevo_fili, 240);            // Кунцевская -> Кунцевская

            Scheme.AddRelation(starokach, don, 240);                     // Бульвар Дмитрия Донского -> Улица Старокачаловская

            Scheme.AddRelation(kah_kah, sevastopol, 240);                // Севастопольская -> Каховская
            Scheme.AddRelation(kashir, kashir_kah, 240);                 // Каширская -> Каширская

            Scheme.AddRelation(krasnogvard, zyablik, 360);               // Красногвардейская -> Зябликово
            Scheme.AddRelation(chkal, kursk_blue, 300);                  // Чкаловская -> Курская (синяя)
            Scheme.AddRelation(chkal, kursk_ring, 360);                  // Чкаловская -> Курская (кольцо)
            Scheme.AddRelation(sret_bul, prudi, 240);                    // Чистые пруды -> Сретенский бульвар
            Scheme.AddRelation(trub, tzhvetnoy, 300);                    // Цветной бульвар -> Трубная
            Scheme.AddRelation(petr_razum_lubl, petrovsko, 180);         // Петровско-Разумовская -> Петровско-Разумовская

            Scheme.AddRelation(prosp_mira_kaluzh, prosp_mira_ring, 300); // Проспект Мира -> Проспект Мира
            Scheme.AddRelation(turgen, prudi, 300);                      // Тургеневская -> Чистые пруды
            Scheme.AddRelation(turgen, sret_bul, 300);                   // Тургеневская -> Сретенский бульвар
            Scheme.AddRelation(oktyabr_kaluzh, oktyabr, 300);            // Октябрьская -> Октябрьская
            Scheme.AddRelation(novoyas, bitz_park, 120);                 // Новоясеневская -> Битцевский парк

            Scheme.AddRelation(barrikad, krasnopres, 330);               // Баррикадная -> Краснопресненская
            Scheme.AddRelation(pushkin, tver, 360);                      // Тверская -> Пушкинская
            Scheme.AddRelation(pushkin, chehov, 360);                    // Пушкинская -> Чеховская
            Scheme.AddRelation(kuznez, lubyanka, 240);                   // Кузнецкий мост -> Лубянка
            Scheme.AddRelation(kitay_t, kitay_kaluzh, 120);              // Китай-город -> Китай-город
            Scheme.AddRelation(tagan_t, tagan_ring, 360);                // Таганская -> Таганская
            Scheme.AddRelation(prolet, krest_zast, 330);                 // Пролетарская -> Крестьянская застава

            Scheme.AddRelation(ploshad_ilicha, rim, 360);                // Площадь Ильича -> Римская
            Scheme.AddRelation(marks, tagan_ring, 240);                  // Марксистская -> Таганская (кольцо)
            Scheme.AddRelation(marks, tagan_t, 390);                     // Таганская -> Марксистская

            Scheme.AddRelation(tretyak_kalin, tretyak_kaluzh, 180);      // Третьяковская -> Третьяковская
            Scheme.AddRelation(tretyak_kalin, novokuz, 240);             // Третьяковская -> Новокузнецкая
            Scheme.AddRelation(park_pobedi_kalin, park_pobedi_blue, 60); // Парк Победы -> Парк Победы
            Scheme.AddRelation(horoshevskaya, polezh, 180);              // Хорошевская -> Полежаевская

            #endregion

            #endregion
        }