コード例 #1
0
        static void Main(string[] args)
        {
            Console.WriteLine(@"Сначала вводится кол-во вершин, потом вводятся названия вершин, 
далее вводится кол-во ребер и после вводятся ребра состоящие из строки с двумя вершинами.
Если в графе присутствуют одинаковые ребра, то они будут считаться как одно.");

            int AmountOfPoints = Convert.ToInt32(Console.ReadLine());

            string[] Points = new string[AmountOfPoints];
            for (int i = 0; i < AmountOfPoints; i++)
            {
                Points[i] = Console.ReadLine();
            }
            RebroArray rebra = new RebroArray(Convert.ToInt32(Console.ReadLine()));

            rebra.CreateArray();
            Console.WriteLine("Среди ребер, являются мостами:");
            for (int i = 0; i < rebra.size; i++)
            {
                if (CheckRebro(rebra[i], rebra))
                {
                    rebra[i].Show();
                }
            }
            Console.ReadKey();
        }
コード例 #2
0
        static bool CheckRebro(Rebro current, RebroArray mas)
        {
            Rebro[] passed = new Rebro[mas.size];
            for (int i = 0; i < mas.size; i++)
            {
                passed[i] = new Rebro();
            }

            int passedCounter = 1;

            passed[0] = current;
            bool ok = true;

            while (ok)
            {
                for (int i = 0; i < mas.size; i++)
                {
                    if ((current.To == mas[i].To && CheckPassed(passed, mas[i])) || (current.To == mas[i].From && CheckPassed(passed, mas[i])))
                    {
                        if (mas[i].From == passed[0].From || mas[i].To == passed[0].From)
                        {
                            return(false);
                        }
                        else
                        {
                            ok = false;
                        }

                        string a, b;
                        if (mas[i].From == current.To)
                        {
                            a = mas[i].From;
                            b = mas[i].To;
                        }
                        else
                        {
                            a = mas[i].To;
                            b = mas[i].From;
                        }
                        current = new Rebro(a, b);
                        passed[passedCounter] = current;
                        passedCounter++;
                        i = -1;
                    }
                    else
                    {
                        ok = false;
                    }
                }
                if (!ok)
                {
                    for (int i = passedCounter - 1; i >= 0; i--)
                    {
                        if (i == 0)
                        {
                            ok = false;
                            break;
                        }

                        Rebro chosen = new Rebro();
                        for (int j = 0; j < mas.size; j++)
                        {
                            if ((mas[j].To == passed[i].To && CheckPassed(passed, mas[j])) || mas[j].From == passed[i].From && CheckPassed(passed, mas[j]) ||
                                (mas[j].From == passed[i].To && CheckPassed(passed, mas[j])) || mas[j].To == passed[i].From && CheckPassed(passed, mas[j]))
                            {
                                current = passed[i - 1];
                                ok      = true;
                                break;
                            }
                        }
                        if (ok)
                        {
                            break;
                        }
                    }
                }
            }
            return(true);
        }