9.4.2. Является ли граф связным?
9.4.2. Является ли граф связным?
Не все графы связные. Иногда нет способа «добраться из одной точки в другую», то есть между двумя вершинами нет никакого пути, составленного из ребер. Связность — это важное свойство графа, его надо уметь вычислять. В связном графе любая вершина достижима из любой другой.
Не будем объяснять принцип работы алгоритма, интересующийся читатель может найти описание в любой книге по дискретной математике. Но в листинге 9.4 приведена его реализация на Ruby.
Листинг 9.4. Выяснение того, является ли граф связным
class Graph
def connected?
x = vmax
k = [x]
l = [x]
for i in 0..@max
l << i if self[x,i]==l
end
while !k.empty?
y = k.shift
# Теперь ищем все ребра (y,z).
self.each_edge do |a,b|
if a==y || b==y
z = a==y ? b : a
if !l.include? z
l << z
k << z
end
end
end
end
if l.size < @max
false
else
true
end
end
end
mygraph = Graph.new([0,1], [1,2], [2,3], [3,0], [1,3])
puts mygraph.connected? # true
puts mygraph.euler_path? # true
mygraph.remove 1,2
mygraph.remove 0,3
mygraph.remove 1,3
puts mygraph.connected? # false
puts mygraph.euler_path? # false
В примере упомянут метод euler_path?, с которым мы еще не встречались. Он определен в разделе 9.4.4.
Можно было бы усовершенствовать этот алгоритм, так чтобы он находил все связные компоненты несвязного графа. Но мы не станем этого делать.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
20.3. Определение, является ли терминал виртуальной консолью
20.3. Определение, является ли терминал виртуальной консолью Для того чтобы определить, является ли текущий терминал виртуальной консолью, можно открыть /dev/tty и применить VT_GETMODE для запроса режима:struct vt_mode vtmode;fd = open("/dev/tty", O_RDWR);retval = ioctl (fd, VT_GETMODE, &vtmode);if (retval < 0) { /* Данный
Чем TDD не является
Чем TDD не является При всех своих достоинствах TDD – не религия и не панацея. Выполнение трех законов не гарантирует ни одного из перечисленных преимуществ. Плохой код можно написать даже при предварительном написании тестов. Да и сами тесты тоже могут быть написаны
13.3.3. Является ли Emacs доводом против Unix-традиции?
13.3.3. Является ли Emacs доводом против Unix-традиции? Традиционное для Unix видение мира, однако, настолько привязано к минимализму, что в нем не слишком хорошо различаются проблемы специализированного кода vi и необязательная сложность Emacs. Причиной того, что vi и Emacs никогда не
Правило 32: Используйте открытое наследование для моделирования отношения «является»
Правило 32: Используйте открытое наследование для моделирования отношения «является» Вильям Демент (William Dement) в своей книге «Кто-то должен бодрствовать, пока остальные спят» (W. H. Freeman and Company, 1974) рассказывает о том, как он пытался донести до студентов наиболее важные идеи
13.3.3. Является ли Emacs доводом против Unix-традиции?
13.3.3. Является ли Emacs доводом против Unix-традиции? Традиционное для Unix видение мира, однако, настолько привязано к минимализму, что в нем не слишком хорошо различаются проблемы специализированного кода vi и необязательная сложность Emacs. Причиной того, что vi и Emacs никогда не
8.7. Определение, является ли класс объекта подклассом другого класса
8.7. Определение, является ли класс объекта подклассом другого класса ПроблемаИмеется два объекта и требуется узнать, имеют ли их классы отношения на уровне базовый класс/производный класс, или они не связаны друг с другом.РешениеИспользуйте оператор dynamic_cast, который
Таблица является набором
Таблица является набором Таблица является набором, чья полная спецификация может быть получена из системных таблиц сервером базы данных, когда к таблице происходит обращение из запроса, полученного от клиента. Сервер Firebird выполняет свои собственные внутренние запросы
Решение, что является истинным
Решение, что является истинным На рис. 21.1 показаны возможные результаты вычисления двух предикатов из предыдущего примера.В нашем примере вначале проверяется (HIRE_DATE > CORRENT_DATE - 366), потому что это самый левый предикат. Если бы у него были вложенные предикаты, то сначала
Пример 7-6. Проверка -- является ли строка пустой
Пример 7-6. Проверка -- является ли строка пустой #!/bin/bash# str-test.sh: Проверка пустых строк и строк, не заключенных в кавычки,# Используется конструкция if [ ... ]# Если строка не инициализирована, то она не имеет никакого определенного значения.# Такое состояние называется "null"
У15.2 Является ли окно строкой?
У15.2 Является ли окно строкой? Окно содержит ассоциированный с ним текст, представленный атрибутом text типа STRING. Стоит ли отказаться от атрибута и объявить WINDOW наследником класса
Киберпространство является общественным
Киберпространство является общественным Развернувшаяся в Соединенных Штатах полемика вокруг Закона о телекоммуникациях 1996 года безжалостно обнажила ограничения «калифорнийской идеологии». Барлоу может, конечно, предаваться мечтаниям об уходе в гиперреальность
Приватность не является обязанностью вашей страховой компании
Приватность не является обязанностью вашей страховой компании В то время как местный госпиталь озабочен постоянным напоминанием своим служащим о необходимости уважать конфиденциальность пациентов, страховая компания озабочена постоянным напоминаем мне, что