Взаимные преобразования "Матрица смежности" <-> "Матрица инцидентности" - 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)))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы