Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 18.05.2017
Сообщений: 2

Существует ли путь между двумя вершинами графа

01.06.2017, 20:32. Показов 2603. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Текст задачи:
"Граф задан с помощью цепных списков. Определить, существует ли путь между двумя заданными вершинами."
Так как термин "цепные списки" мне не понятен, я граф представляю в ином виде (такое преподавателем не запрещалось): ((2 3) (1) (1)) - то есть, в каждом элементе списка перечисляю числа вершин, с которыми соединена вершина с порядковым номером данного элемента в списке.

Моё решение этой задачи на Лиспе:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun fin (A B L)
 (cond
   ((null L) nil)
   ((EQ A B) nil)
   (T (cond
       ((NOT(member B (nth (- A 1) L))) (let ((S (list A))) (F A B L S)))
       (T T)
      )
   )
 )
)
 
(defun F (X B L S)               ; S - список, куда записываются номера пройденных вершин
 (dolist (i (nth (- X 1) L))
             (cond
               ((member i S) ())   
               ((EQ (length S) (length L)) ())
               ((NOT(member B (nth (- i 1) L))) (F i B L (cons i S)))
               (T (return T))
             )
 )
)
Помогите, пожалуйста, с реализацией этого задания на Хаскеле.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2017, 20:32
Ответы с готовыми решениями:

Существует ли путь между двумя вершинами графа
Задача звучит так: "Граф задан с помощью цепных списков. Определить, существует ли путь между двумя заданными вершинами." Я...

Написать функцию, определяющую кратчайший путь между указанными двумя вершинами графа
Задан граф, у которого для каждой дуги задана ее длина: ((a b 12) (s d 3) …). Написать функцию, определяющую кратчайший путь между...

Задача на взвешенный ориентированный граф, существует ли путь L между двумя заданными вершинами
Во входном файле указывается количество вершин взвешенного ориентированного графа и матрица смежности. Определить, существует ли путь...

3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
02.06.2017, 08:10
Здесь подойдет обход в глубину. Вот реализация:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- Отметка вершины m как посещенной
 
mark :: [Int] -> Int -> Int -> [Int]
mark chk n m | (n == 0) = m : (tail chk)
             | otherwise = (head chk) : (mark (tail chk) (n-1) m)
 
-- Дать вершину, связанную с k-й и еще непосещенную
             
getV :: [[Int]] -> [Int] -> Int -> Int
getV g chk k | lst == [] = -1
             | otherwise = head lst 
               where   lst=filter (\ x -> (chk !! x)==0) (g !! k);
             
-- Обход в глубину с накопительными параметрами
 
dfs' :: [[Int]] -> [Int] -> [Int] -> Int -> Int -> [Int]
dfs' g pth chk n m | pth == [] = []
                   | (last pth) == m = pth
                   | new == -1 = dfs' g (init pth) chk n m
                   | otherwise = dfs' g (pth ++ [new]) (mark chk new 1) n m
                     where new=getV g chk (last pth)
                              
-- Парадная функция
 
dfs :: [[Int]] -> Int -> Int -> [Int]
dfs g n m = dfs' g [n] (mark (take k (repeat 0)) n 1) n m
            where k=length g
Граф задается списками смежности - списком списков, в i-м элементе которого перечисляются вершины, связанные с i-й

Haskell
1
2
3
4
5
6
Main> dfs [[1,2],[0,2,3],[0,1,3,4],[1,2,4],[2,3]] 0 4
[0,1,2,3,4] -- путь из нулевой в 4-ю
Main> dfs [[1,2],[0,2,3],[0,1,4],[1,2,4],[2,3]] 0 4
[0,1,2,4]  -- путь из нулевой в 4-ю
Main> dfs [[1,2],[0,2],[0,1],[1,2,4],[2,3]] 0 4
[]  -- а в этом графе пути нет
2
02.06.2017, 08:17

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
Парадная функция
Термин, однако.

0
02.06.2017, 11:17

Не по теме:

KolodeznyDiver, да, немного не того...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2017, 11:17
Помогаю со студенческими работами здесь

Граф задан матрицей смежности. Определите, существует ли в графе путь между двумя заданными вершинами(в делфи).
Помогите пожалуйста с Задачей, как ни пробовала - не получается... Граф задан матрицей смежности. Определите, существует ли в графе путь...

Существует ли прямой путь между вершинами
Всем привет, есть вот такий вот код, в котором я заполняю свой граф. Console.WriteLine("Enter amount of vertex:"); ...

Длина кратчайшего пути между двумя вершинами графа
Найти длину кратчайшего пути между двумя вершинами графа

Определение наименьшего пути между двумя заданными вершинами графа
Помогите пожалуйста. Нужна самая простая программа. Разработать алгоритм определения наименьшего пути между двумя заданными вершинами графа

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru