Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2015, 13:47   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Проверка графа на связность

Помогите исправить алгоритм в коде, работает не так как надо.
Писал его сам вот по этому http://algolist.manual.ru/maths/graphs/linked.php
алгоритму.
Код:
  public void IsConnected()
        {
            int[] VertexState = new int[size];
            bool red = false;
            int k = 0;
            int finalCount = 0;

            for (int i = 0; i < size; i++)
                VertexState[i] = 1; // все черные

            VertexState[0] = 2; // красная

            do
            {
                red = true;


                for (int i = 0; i < size; i++)
                {
                    if (VertexState[i] == 2)
                    {
                        VertexState[i] = 3;
                        k = i;
                        break;
                    }
                }

                for (int i = 0; i < size; i++)
                {

                    if (graph[k][i] == 1 && VertexState[i] == 1)
                    {
                        VertexState[i] = 2;
                    }
                }

                for (int i = 0; i < size; i++)
                {
                    if (VertexState[i] == 2)
                        red = false;
                }

            } while (red == false);
            

            for (int i = 0; i < size; i++)
                if (VertexState[i] == 1)
                    finalCount++;
                  
                // Если finalCount = 0, то граф связный

      
        }
P.S - graph[i][j] - матрица смежности
Praud вне форума Ответить с цитированием
Старый 15.05.2015, 16:48   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
работает не так как надо
Контрпример будет?
Poma][a вне форума Ответить с цитированием
Старый 15.05.2015, 17:12   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Будет. Допустим граф имеет 7 вершин, и graph[6][i] = 0, где i = 1...7

То есть вершина не имеет ребер. Собственно граф должен быть не связным, однако в программе finalCount выдает 0, что по алгоритму означает, что он является связным.
Praud вне форума Ответить с цитированием
Старый 15.05.2015, 17:17   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Не могли бы Вы дать полную матрицу смежности
А то есть подозрения на то, что граф Вы все-таки задаете неориентированный
Poma][a вне форума Ответить с цитированием
Старый 15.05.2015, 17:33   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

0 1 1 0 1 0 0
0 0 0 1 0 1 1
1 0 0 0 1 1 0
0 1 0 0 0 1 1
1 0 1 0 0 0 0
0 1 0 0 0 0 1
0 0 0 0 0 0 0

Граф и так неориентированный вроде как
Praud вне форума Ответить с цитированием
Старый 15.05.2015, 17:51   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну дык все правильно. Вы можете из 2-ой, 4-ой, 6-ой добраться до 7-ой вершины
Poma][a вне форума Ответить с цитированием
Старый 15.05.2015, 17:56   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Жестяк я протупил, а можете дать контрпример, где выявится что граф не связный, чтобы убедиться в правильности кода.

я просто уже самому себе не верю

Последний раз редактировалось Poma][a; 15.05.2015 в 17:59.
Praud вне форума Ответить с цитированием
Старый 15.05.2015, 18:00   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
а можете дать контрпример, где выявится что граф не связный, чтобы убедиться в правильности кода.
Возьми свою матрицу и обнули i-ый столбец и i-ую строку. (Где i - произвольное число). Вот и получится у тебя две (как минимум) компоненты связности
Poma][a вне форума Ответить с цитированием
Старый 15.05.2015, 18:19   #9
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Спасибо) вроде все работает и правильно показывает
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка графа на двудольность Krivorukov Помощь студентам 2 20.01.2015 07:53
Проверка на связность графа. C. Yakoff Помощь студентам 0 25.06.2013 19:12
Проверка графа на ацикличность Lodyr Общие вопросы C/C++ 0 08.10.2012 20:39
Проверка системы циклов графа на линейную независимость Сергеевна Общие вопросы по Java, Java SE, Kotlin 0 13.04.2011 00:11
Связность графа. Пaвeл Помощь студентам 0 26.04.2009 10:42