Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение способа задания графа, Список ребер ----> Структура смежности 
V
    Опции темы
oekamon
  Дата 27.12.2005, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.11.2005

Репутация: нет
Всего: нет



Здравствуйте,

необходимо составить для графа, заданного списком ребер, соответствующую ему структуру смежности. То есть, если есть граф, состоящий из четырех вершин:

((1 2) (1 3) (1 4) (3 4)),

то соответствующая списку ребер структура смежности будет выглядеть так:

((1 . (2 3 4)) (2 . (1)) (3 . (1 4)) (4 . (1 3))),

то есть это список точечных пар, где левая часть - какая-то вершина, а правая - список всех других вершин, смежных с этой какой-то вершиной.

Самое трудное в этой проблеме - затолкать в структуру смежности (4 . (1 3)), т. к. 4 не является головой какого-либо вложенного в список ребер списка.

Буду надеяться на Вашу помощь.
PM MAIL WWW ICQ   Вверх
setq
Дата 27.12.2005, 11:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











я не знаю LISP, но если у Вас сложность с тем чтобы запихнуть пару для вершины, у которой нет выходов, то может быть продублировать каждый вектор по принципу "туда и обратно"?

в смысле: у Вас есть вектор (A B) -- добавьте также вектор (B A) и т.д.

можете так сделать? решится тогда Ваша проблема?
  Вверх
svg
Дата 28.12.2005, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 14
Всего: 18



Код

(defun graph-adjacency (edges)
  (let* ((vertexes (remove-duplicates (apply #'append edges)))
         (graph-adjacency (mapcar #'(lambda (vertex) (cons vertex '()))
                                  vertexes)))
    (mapc #'(lambda (edge)
              (destructuring-bind (from to)
                  edge
                (push to (cdr (assoc from graph-adjacency)))
                (push from (cdr (assoc to graph-adjacency)))))
          edges)
    graph-adjacency))

(graph-adjacency '((1 2) (1 3) (1 4) (3 4)))
=> ((2 1) (1 4 3 2) (3 4 1) (4 3 1))


P.S: '(1 . (2 3 4)) == (1 2 3 4) == (cons 1 (2 3 4))
PM MAIL   Вверх
Cr@$h
Дата 24.8.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
svg ++ за красивый код для новичка.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.