Взаимные преобразования "Матрица смежности" <-> "Матрица инцидентности" - Lisp
Формулировка задачи:
Вершины неорентированного графа без петель пронумерованы числами от
0
до некоторогоn
. Из матрицы инцидентности получить матрицу смежности, а из матрицы смежности - матрицу инцидентности.Решение задачи: «Взаимные преобразования "Матрица смежности" <-> "Матрица инцидентности"»
textual
Листинг программы
;Если вершины помечены числами. (defun List->Adj/Matr (lst) (let* ((row (remove-duplicates (reduce #'append lst))) (ver (sort (copy-list row) #'<))) (mapcar (lambda (i) (list i (mapcar (lambda (x) (if (member x (cdr (assoc i lst))) 1 0)) ver))) ver))) ;Ориентированный. > (List->Adj/Matr '((1 2 3 6) (2 3) (3 4) (4 5) (6 5))) ((1 (0 1 1 0 0 1)) (2 (0 0 1 0 0 0)) (3 (0 0 0 1 0 0)) (4 (0 0 0 0 1 0)) (5 (0 0 0 0 0 0)) (6 (0 0 0 0 1 0))) ;Неориентированный. > (List->Adj/Matr '((1 2 5) (2 1 3 4) (3 2 5) (4 2 5) (5 1 4))) ((1 (0 1 0 0 1)) (2 (1 0 1 1 0)) (3 (0 1 0 0 1)) (4 (0 1 0 0 1)) (5 (1 0 0 1 0)))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д