Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
2 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 82

Дана схема метрополитена, найти кратчайший путь между станциями

31.03.2013, 22:49. Показов 7130. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!


Дана схема метрополитена, найти кратчайший путь между станциями.
Схема метрополитена задаётся с помощью матрицы смежности или матрицы инциденций. Каждому перегону соответствует некоторый вес (длительность перегона). Каждой пересадке также соответствует некоторый вес (длительность пересадки). Необходимо для заданной преподавателем схемы вывести самый короткий путь или все такие пути, если их несколько.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2013, 22:49
Ответы с готовыми решениями:

Найти кратчайший путь между точками графа
вот есть программка, в ней нужно найти кратчайший путь между точками. ТОесть найти самую малую сумму веса ребер от точки А до точки Б . В...

Найти кратчайший путь между двумя заданными пунктами
Прошу объявить общий сбор всех хакеров, нужно решить задачу на C++. У меня ВСТАЛА небольшая проблема, так как я не професси, я не могу...

Найти кратчайший путь между двумя заданными городами
Дана плоская страна и в ней n городов. Предположим, что в этой стране есть дорожная сеть. Найти кратчайший путь между двумя заданными...

25
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
01.04.2013, 02:14
Наверно, надо каждый узел разодрать на два, чтобы пересадка тоже изображалась ребром. И реализовать алгоритм Дейкстры. Или погуглить...
2
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 19
28.04.2014, 14:56
Случайно, ни у кого нет готового решения?
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
28.04.2014, 15:33
Bertolotto, есть, но не дам =)
1
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 19
28.04.2014, 15:37
transformator.t, очень-очень жаль.=(
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
28.04.2014, 15:52
мой код вам не подойдёт.
0
VH
431 / 259 / 23
Регистрация: 23.11.2010
Сообщений: 278
28.04.2014, 19:47


Lisp
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
28
29
(defun F (Net Init Term &optional (Route_list (list (list Init))))
 (apply
 '(lambda (result next)
   (if result
    (mapcar 'reverse result)
    (F Net Init Term (UPDATE_ROUTE Net next))))
  (EXTRACT_RESULT Term Route_list)))
 
(defun EXTRACT_RESULT (Term Route_list)
 (if Route_list
  (apply
  '(lambda (route result next)
    (if (equal (car route) Term)
     (list (cons route result) next)
     (list result (cons route next))))
   (cons
    (car Route_list)
    (EXTRACT_RESULT Term (cdr Route_list))))
 '(nil nil)))
 
(defun UPDATE_ROUTE (Net Route_list)
 (apply 'append
  (mapcar
  '(lambda (route)
    (mapcar
    '(lambda (link)
      (cons link route))
     (cdr (assoc (car route) Net))))
   Route_list)))
Схема метрополитена связывается с формальным параметром Net функции (F) и представлена списком, элементами которого являются списки, в каждом из которых первый элемент - обозначение (строка, число, символ) станции, а остальные элементы - обозначения станций, с которыми данная станция связана. Узлы, на которых возможна пересадка, представлены двумя (или более) связанными станциями (или одной, если переход не требует затрат). Обозначение начальной станции связывается с формальным параметром Init функции (F), а обозначение конечной станции - с формальным параметром Term функции (F).
Вызов функции (F) возвращает список, элементами которого являются маршруты (списки обозначений станций) с минимальным числом промежуточных станций от начальной до конечной станции.
Например, для сети, представленной списком

Lisp
1
2
3
4
5
(setq sampleNet
'((A B)(B A C)(C B D)(D C E X)(E D F O)(F E J)(G H)(H G I W)(I H J)
  (J I K F)(K J T Z)(L M)(M L N)(N M O Y)(O N P E)(P O Q)(Q P R U)
  (R P S)(S R)(T K U)(U T V Q)(V U W)(W V X H)(X W Y D)(Y X Z N)
  (Z Y K)))
- это сеть (в скобках - парные пересадочные станции) с кольцевой линией K-T-U(Q)-V-W(H)-X(D)-Y(N)-Z и радиальными линиями A-B-C-D(X)-E(O)-F(J), G-H(W)-I-J(F)-K и L-M-N(Y)-O(E)-P-Q(U)-R-S - может быть сделан вызов функции


Lisp
1
(F sampleNet 'B 'T)
который возвращает

Lisp
1
((B C D E F J K T) (B C D X W V U T) (B C D X Y Z K T))
Это решение задачи не является оптимальным.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
28.04.2014, 21:12
А ведь для графа c одинаковыми длинами ребер кратчайший путь из A в B может быть получен просто обходом в ширину из вершины A...

Добавлено через 38 минут
Вот поиск кратчайшего пути для графа с равными ребрами:

Lisp
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
28
29
30
31
32
33
34
;; список вершин, связанных с данной и не посещенных             
             
(defun getall (v graph chk) 
 (remove-if #'(lambda (z) (member z chk))
                 (mapcar #'(lambda (y) (if (eq (car y) v) (cadr y) (car y))) 
                        (remove-if-not #'(lambda (x) (member v x)) graph))))
  
;; Построение стягивающего дерева
             
(defun bfsi (graph &optional (chk '(1)) (queue '(1)))
   (cond ((null queue) nil)
         (t (let ((n (getall (car queue) graph chk)))
                 (append (mapcar #'(lambda (x) (list (car queue) x)) n)
                         (bfsi graph (append chk n) (append (cdr queue) n)))))))
 
(defun bfs (graph v)
  (bfsi graph (list v) (list v)))                         
 
;; Поиск пути  в стягивающем дереве
                 
(defun find-path (stree v1 v2 &optional path)
  (if (eq v1 (caar path)) path
         (dolist (i stree nil)
           (when (eq (cadr i) v2) (return (find-path stree v1 (car i) (cons i path)))))))
         
;; ведущая программа: поиск в графе graph кратчайшего пути от vbeg до vend
        
(defun shortest-path (graph vbeg vend)
  (let ((stree (bfs graph vbeg)))
       (find-path stree vbeg vend))) 
 
(shortest-path '((1 2) (1 3) (2 4) (3 4) (4 5) (4 6) (4 7) (5 6) (6 7) (7 8) (7 9) (8 10) (8 11) (9 10) (9 11)) 4 11)
 
==> ((4 7) (7 8) (8 11))
2
VH
431 / 259 / 23
Регистрация: 23.11.2010
Сообщений: 278
28.04.2014, 21:55
Уважаемая(ый) Bertolotto, можно в поисковой системе задать в качестве строки для поиска
"(defun F (Net Init Term &optional (Route_list (list (list Init))))"
и легко обнаружить тот вполне приличный ресурс, на котором сохранилось данное обсуждение с дальнейшими переработками текста (кроме скопипасченного впопыхах сюда).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
29.04.2014, 07:32
Уважаемый(ая) VH, Вам никто не запрещает разместить на Форуме нормальное решение (или, по крайней мере, скопиасченное не впопыхах)...
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
01.05.2014, 02:09
Цитата Сообщение от Catstail Посмотреть сообщение
для графа c одинаковыми длинами ребер
Что-то я упустил этот момент и никак не могу его найти.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
01.05.2014, 10:31
Цитата Сообщение от castorsky Посмотреть сообщение
Что-то я упустил этот момент и никак не могу его найти.
- это просто мое замечание. Частный случай. А общий, как совершенно справедливо написал helter, - алгоритм Дейкстры.
1
VH
431 / 259 / 23
Регистрация: 23.11.2010
Сообщений: 278
01.05.2014, 12:16
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

На том же вполне приличном ресурсе обнаружился такой текст:
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun DIJKSTRA (Net Init Term &optional (Tmp nil) (Fix (list (cons Init 0))))
 ((lambda (fix_label fix_value)
   (if (equal fix_label Term) fix_value
    (apply 
     #'(lambda (newTmp newFix)
      (DIJKSTRA Net Init Term newTmp newFix))
     (TRANSFER_MIN
      (UPDATE_Tmp Tmp Fix (cdr (assoc fix_label Net)))
      Fix))))
  (caar Fix)
  (cdar Fix)))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun UPDATE_Tmp (Tmp Fix Links)
 (if Links
  ((lambda (link_label link_value)
    (UPDATE_Tmp
     (if (assoc link_label Fix :test 'EQUAL) Tmp
      ((lambda (link mark)
        (if link
         (subst
          (cons link_label (min mark (cdr link)))
          link
          Tmp
          :test 'EQUAL)
         (cons (cons link_label mark) Tmp)))
       (assoc link_label Tmp :test 'EQUAL)
       (+ link_value (cdar Fix))))
     Fix
     (cdr Links)))
   (caar Links)
   (cdar Links))
  Tmp))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun TRANSFER_MIN (Tmp Fix)
 (if Tmp
  (if (cdr Tmp)
   (apply
    #'(lambda (elem newTmp newFix)
     (if (< (cdr elem) (cdar newFix))
      (list
       (cons (car newFix) newTmp)
       (cons elem (cdr newFix)))
      (list
       (cons elem newTmp)
       newFix)))
    (cons (car Tmp) (TRANSFER_MIN (cdr Tmp) Fix)))
   (list
    (cdr Tmp)
    (cons (car Tmp) Fix)))
  (list Tmp Fix)))
Сеть связывается с формальным параметром Net и представлена списком списков связей узлов в следующем виде:
((узел (связанный_узел . длина_дуги)...)...)
Например, сеть
(setq Net
'((1 (2 . 4)(3 . 7))
(2 (1 . 4)(3 . 3)(6 . 1))
(3 (1 . 7)(2 . 3)(4 . 2)(5 . 5))
(4 (3 . 2)(5 . 1)(6 . 7))
(5 (3 . 5)(4 . 1)(6 . 3))
(6 (2 . 1)(4 . 7)(5 . 3))))
3
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
03.05.2014, 16:48
Хорошо когда все необходимые данные уже добыты, и сформирована надлежащая структура.
Но как составить данные? Представим себе схему токийского метрополитена. Моло того что нужно выписать все станции, так еще и найти расстояния между ними.
Для решения подобной задачи предлагаю графический способ. Можно взять любую карту, закинуть ее картинкой в AutoCad, отмасштабировать. Затем обрисовать все станции кружочками и соединить линиями. Тоже рутина, но это всего лишь идея.

Условные обозначения:
ребра - линии,
станции - окружности [необязательный элемент],
вершины - названия станций [однострочный текст].

Для примера я взял картинку из сети, диамант, рисунок №1. Загрузил, обозначил углы вершинами.
Получилась схема, рисунок №2.
Названия следует вписывать таким образом, чтобы точка вставки была прямо в центре окружности, рисунок №3.
Есть три пути из левого угла по горизонтали в правый. То есть: 1-one -> 7-seven.
Следует найти самый короткий по длине. Визуально видно что это средний путь по прямой.
Все что нужно для эксперимента, это достать данные об названиях пунктов и расстояния между ними.
Доверим это дело машине. Это будет делаться в два этапа. Сначала будут нанесены все размеры, длины ребер. Для этого применим в одно действие команду-функцию (C:Number-Edges). Результат на рисунке №4.
И теперь данные будут извлечены и отпечатаны в файл, команда (C:Map-Scan-Data).

Если все прошло нормально, то в файле должна обнаружиться вот такая запись, рисунок №5:
Lisp
1
2
3
4
(("3-three" "350" "2-two")     ("4-four" "350" "3-three")    ("5-five" "350" "4-four") 
 ("6-six" "350" "5-five")      ("8-eight" "1345.36" "1-one") ("8-eight" "1345.36" "7-seven")
 ("10-ten" "1098.41" "9-nine") ("1-one" "549.19" "9-nine")   ("7-seven" "549.19" "10-ten")
 ("7-seven" "300" "6-six")     ("2-two" "300" "1-one"))
Тут еще есть маленькая тонкость, связанная с масштабом обозначений, которую нужно учитывать.
На этом считаю autolisp-овую часть завершенной.
Ну а дальше нужно сформировать требуемую структуру и применить соответствующий алгоритм.
Обычный поиск в ширину, найдет путь: 1-one -> 8-eight -> 7-seven, который является наоборот самым длинным, хотя промежуточных станций там меньше всего.
Естественно напрашивается алгоритм Дейкстры, но это уже совсем другая история.
Кликните здесь для просмотра всего текста
Lisp
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
;****************************************************************
;;;; Карта Транспортной Сети.                                   *
;;;; Нанести длины на отрезки, в неориентированном графе.       *
;;;; Извлечь названия смежных вершин, и расстояния между ними.  *
;****************************************************************
(defun C:Number-Edges (/ osmode nabor)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;; Применить ко всем выбраным линиям, [длины].
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Вспомогательная для Number-Edges.
(defun Length-Edge (obj / osmode beg end num mid)
  ;;; Текст с длиной отрезка на его середину.
  (setq beg (cdr (assoc 10 obj))
        end (cdr (assoc 11 obj))
        num (distance beg end)
        mid (list (+ (- (car  beg) 10.0) (* 0.5 (- (car  end) (car  beg))))
                  (+ (- (cadr beg)  5.0) (* 0.5 (- (cadr end) (cadr beg))))
                  0.0))
  (command "_.text" mid 0 (rtos num 2 2))
); (Len-Edge object)
;---------------------------------------------------------------------------
  (setq osmode (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (command "_.color" 5)
  ;; набор из всех выбранных линий. Границы вручную.
  (setq nabor (ssget (list (cons 0 "LINE"))))
  ;; нанесение длин линий.
  ((lambda (/ count)
    (setq count 0)
    (repeat (sslength nabor)
      (Length-Edge
        (entget
          (ssname nabor count)))  ; Length-Edge для каждого отрезка
      (setq count (1+ count))
    ))); lambda
  (command "_.color" 7)
  (setvar "OSMODE" osmode)
  (princ)
); (C:Number-Edges)
;**********************************************************************************
(defun C:Map-Scan-Data (/ nabor)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;; Собрать данные из всех отрезков на карте.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Вспомогательная, для Map-Scan-Data.
(defun Data-Tracing (obj / beg end nabor)
  ;;; Извлечь данные об отрезке. Названия пунктов на краях и длина.
  (setq beg (cdr (assoc 10 obj))
        end (cdr (assoc 11 obj))
        ;; создать набор для одного отрезка, секущей линией.
        nabor (ssget "_F"
                  (list (mapcar '+ beg '(30.0 0.0 0.0)) beg
                        (mapcar '+ end '(30.0 0.0 0.0)) end)
                  (list (cons 0 "TEXT"))))
  ;; извлечь данные из набора в список.
  ((lambda (/ count result)
    (setq count 0)
    (repeat (sslength nabor)
      (setq result     ;; извлечение текстовых элементов.
            (cons (cdr (assoc 1 (entget (ssname nabor count))))
                  result)
            count (1+ count))
    ); repeat
    result))
); (Data-Tracing object)
;------------------------------------------------------------------------
;;; Печать в файл, для Map-Scan-Data.
(defun Write-W (lst / adres find-file descriptor)
  ;;; Запись в файл списка данных.
  (setq adres (getvar "DWGPREFIX"))
  (if (setq find-file (getfiled "Выберите файл для записи" adres "txt" 1))
      (progn
        (setq descriptor (open find-file "w"))
        (prin1 lst descriptor)
        (close descriptor))
      (princ "\nФайл не определен."))
  (princ)); (Write-W '("one" "two" "three.."))
;------------------------------------------------------------------------
  (setq nabor (ssget (list (cons 0 "LINE")))) ; указать границы вручную
  ;; цикл извлечения-накопления данных.
  ((lambda (/ count accum)
    (setq count 0)
    (repeat (sslength nabor) ;; данные от каждого отрезка из набора.
      (setq accum (cons (Data-Tracing (entget (ssname nabor count)))
                         accum)
            count (1+ count))
    ); repeat
    (Write-W accum))) ; запись результата в файл
); (C:Map-Scan-Data)
;**********************************************************************************
Миниатюры
Дана схема метрополитена, найти кратчайший путь между станциями   Дана схема метрополитена, найти кратчайший путь между станциями   Дана схема метрополитена, найти кратчайший путь между станциями  

Дана схема метрополитена, найти кратчайший путь между станциями   Дана схема метрополитена, найти кратчайший путь между станциями  
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.05.2014, 15:40
Lambdik, Вот Вы используете в своем коде локальные функции. Декларируете их при помощи defun. Но таким образом они становятся глобальными. Например, в racket такой номер не пройдет.
Lisp
1
2
3
4
5
6
7
> (define (foo)
    (define (nested) (foo))
    (nested))
> (nested)
. . D:\programs\Racket\collects\racket\private\more-scheme.rkt:263:2: nested: undefined;
 cannot reference an identifier before its definition
>
В Visual Lisp это работает без проблем. Правда не понимаю почему завершается без ошибки.
Lisp
1
2
3
4
_$ (defun foo ()  (defun nested() (foo)) (nested))
FOO
_$ (nested)
_$
Такой инструмент как let в VL просто отсутствует. Есть ли какие способы ограничения области видимости для локальных функций?
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
05.05.2014, 16:05
Цитата Сообщение от castorsky Посмотреть сообщение
Есть ли какие способы ограничения области видимости для локальных функций?
- В Cl - это labels
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.05.2014, 16:20
Catstail, Спасибо , интересует AL, VL.
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
05.05.2014, 21:01
Цитата Сообщение от castorsky Посмотреть сообщение
таким образом они становятся глобальными
Да, конечно. Формы let тоже нету. И я не знаю способов, так сказать, ограничения области видимости для именованных функций.

Вместо let, я предпочитаю делать так:
Lisp
1
2
3
((lambda (/ x)
   (setq x "value"))
)
Считаю что это лучше, чем:
Lisp
1
2
3
((lambda (x) 
    x)
 "value")
Потому что в первом случае код читается сверху-вниз, а во втором сверху, потом снизу, потом в середине. А если лямбд несколько, то еще напряжнее прыгать взглядом по листингу. Уж лучше пусть будет лишнее присваивание, чем винигрет. Кроме того в первом случае переменной присваивается значение там где она объявлена. Код написанный сверху-вниз легко читается без редактора. Вспомогательные функции я кладу под головную, чтобы легче было их в консоль кидать. Туда же пишу документацию.

Вот неплохой справочник по AutoLisp:
http://www.cad.dp.ua/stats/a_lisp/index.php
Правда там не все, был еще один хороший сайт, но его вирусы съели. А вообще материала в сети полно.

Кстати AutoLisp использует динамические переменные. Так что есть эксклюзивная возможность отправиться на 30 лет назад на лисп-машине времени.
Что касается Visual Lisp, то это совсем другой зверь, объектный. Там и функций побольше, и возможностей. При помощи него можно использовать технологию ActiveX, она же COM.
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.05.2014, 21:16
Такое впечатление что паскалисты взяли лисп и убрали из него все нужное чтобы лисп стал паскалем с круглыми скобками.
Цитата Сообщение от Lambdik Посмотреть сообщение
Вместо let, я предпочитаю делать так
А какже рекурсия?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
05.05.2014, 21:25
castorsky, предлагаю суррогатное решение:

Lisp
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
28
29
30
31
32
33
34
35
36
37
;; Создание списка именованных лямбда выражений
 
(defun make-locfunct (nlist lbdlist)
  (mapcar #'(lambda (nam lbd) (cons nam lbd)) nlist lbdlist))
 
==> make-locfunct
 
;; создаем...
 
(setq *f* (make-locfunct '(f1 f2 f3) '((lambda (x y) (* x y)) (lambda (x y) (- x y)) (lambda (x y) (/ x y)))))
 
==> ((f1 LAMBDA (x y) (* x y)) (f2 LAMBDA (x y) (- x y)) (f3 LAMBDA (x y) (/ x y)))
 
;; Вызов локальной функции по имени:
 
(defun loc-funcall (flist fnam &rest r)
  (dolist (f flist nil)
   (when (eq (car f) fnam)
     (return (apply (cdr f) r)))))
 
==> loc-funcall
 
(loc-funcall *f* 'f1 2 3)
 
==> 6
 
(loc-funcall *f* 'f2 2 3)
 
==> -1
 
(loc-funcall *f* 'f3 2 3)
 
==> 2/3
 
;; а когда функции уже не нужны:
 
(setq *f* nil)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2014, 21:25
Помогаю со студенческими работами здесь

Найти кратчайший путь между вершиной и стороной в n-угольнике
Помогите понять, с помощью какого алгоритма можно решить эту задачу. Правильно ли я понимаю, что число &quot;единичных&quot; векторов будет...

С алгоритмом Дейкстра найти кратчайший путь в графе между парой вершин
С помощью алгоритма Дейкстра найти кратчайший путь в графе между парой вершин V0 и V* .

Определить кратчайший путь между вершинами
Для графа считанного из фала определить кратчайший путь между вершинами, заданными в режиме диалога. Изучить и использовать алгоритм...

Определить кратчайший путь между 2-мя точками
Народ, помогите пожалуйста. Вручную написана схема того что должно получиться в итоге.

Кратчайший путь между двумя точками на поверхности
Дано уравнение поверхности z=f(x,y) и две точки на поверхности. Требуется изобразить на одном графике саму поверхность и кратчайший путь от...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru