Курсовая работа: Определение связности графа на Лиспе
((smezver (cadar sreb) (caar sreb) snaid snov) ;смежнаявершина
(cons (caar sreb) (smez snaid snov (cdr sreb)))) ;добавлениевсписок
(t (smez snaid snov (cdr sreb))))) ;пропускребра
;поиск в ширину (список найденных вершин, список новых найденных вершин,
; вершина для поиска, список ребер)
(defun shir(snaid snov y sreb)
(cond
((null snov) nil) ;не найдено ни одной новой вершины
((member y snov) t) ;вершина найдена
(t (shir (append snaid snov) (smez snaid snov sreb) y sreb)))) ;добавление новых вершин
;поиск пути (первая вершина, вторая вершина, список ребер)
(defun path(x y sreb)
(shir nil (list x) y sreb)) ;поиск в ширину
;перебор вершин (первая вершина, список вершин, список ребер)
(defun perebor(fver sver sreb)
(cond
((null sver) t) ;конец перебора
((path fver (car sver) sreb) (perebor fver (cdr sver) sreb)) ;путьнайден
(t nil))) ;нет пути
;определение связанности графа(список вершин, список ребер)
(defun svgraf(sver sreb)
(perebor (car sver) (cdr sver) sreb)) ;перебор вершин и поиск пути от первой вершины ко всем остальным
ПРИЛОЖЕНИЕ 2
Результаты работы программы
Тест: 1
Выражение: (svgraf '(v1 v2 v3 v4) '((v1 v2) (v2 v3) (v3 v4)))
Результат: Т
Тест: 2
Выражение: (svgraf '(v1 v2 v3 v4) '((v1 v2) (v2 v4) (v2 v3) (v3 v4) (v1 v4) (v3 v4)))