kuvshinovdr / OGxx

Object-oriented graph algorithm library in C++ developed for educational purposes.
MIT License
1 stars 1 forks source link

floyd_warshall #76

Closed kuvshinovdr closed 10 months ago

kuvshinovdr commented 10 months ago

Создать файлы include/ogxx/floyd_warshall.hpp и source/floyd_warshall.cpp. Объявить в первом из них и определить во втором из них функции

auto floyd_warshall_only_matrix(Int_matrix const& distances) -> Int_matrix_uptr;

auto floyd_warshall_only_matrix(Float_matrix const& distances) -> Float_matrix_uptr;

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

RomanTimashev commented 10 months ago

а какое отличие есть в работе с Float matrix и Int matrix

kuvshinovdr commented 10 months ago

Никакого, только тип. Там в cpp-файле можно написать функцию-шаблон, которая решает задачу для St_matrix и вызывать её из этих функций. В принципе, можно обойтись реализацией в виде функции-шаблона, которую тогда надо положить в hpp-файл (т.е. показывать её реализацию).

RomanTimashev commented 10 months ago

а предполагается ли то что матрица квадратная на входе?

kuvshinovdr commented 10 months ago

Да.

RomanTimashev commented 10 months ago

что то есть на коленках написал

RomanTimashev commented 10 months ago

все поправил 20.12.23

kuvshinovdr commented 10 months ago
  1. Давайте будем бросать исключение, если матрица не квадратная.
  2. Тип индекса в циклах должен быть Scalar_index, а не int.
  3. Устанавливать значение элемента через get(i, j) = ... не получится, надо писать set(i, j, ...).
  4. Переменная result имеет тип указателя, поэтому обращаться к ней надо через стрелку ->.
  5. Надо реализовать функции, указанные в задании (не шаблонные), которые будут вызывать шаблонную функцию.
RomanTimashev commented 10 months ago

поправил все что указано, но не понимаю почему редактор пишет что параметризовать не получается

kuvshinovdr commented 10 months ago

А зачем автором ставите меня? Надо убрать функцию-шаблон из hpp-файла. Убрать второй параметр (он не нужен).

Итак,

   auto floyd_warshall_only_matrix_ST( const ogxx::St_matrix<ST>& distances, ST)

->

   auto floyd_warshall_only_matrix_ST( const ogxx::St_matrix<ST>& distances) -> St_matrix_uptr<ST>

Проверять размер надо через shape:

if(!distances.is_square()) 

->

if(!distances.shape().is_square()) 

Опечатка:

auto result = distance.copy();

->

auto result = distances.copy();

и

for (Scalar_index j = 0; j < n.cols ++j)

->

for (Scalar_index j = 0; j < n.cols; ++j)

Надо помочь компилятору (то ли MSVC тупит/глючит, то ли стандарт так велит), добавив явно типы результата:

auto floyd_warshall_only_matrix(Int_matrix const& distances) {

->

auto floyd_warshall_only_matrix(Int_matrix const& distances) -> Int_matrix_uptr {

и аналогично вторую функцию.

Наконец, обнаружилось, что я забыл указать const у метода St_matrix::copy. Так что придётся обновить ветку по main (внесены значимые поправки).

RomanTimashev commented 10 months ago

поправил

RomanTimashev commented 10 months ago

еще хотел спросить сколько примерно баллов вы мне поставите чтоб хоть чуть чуть представлять будет автомат или нет

kuvshinovdr commented 10 months ago

100, уже поставил в таблицу.

kuvshinovdr commented 10 months ago

Код добавлен в main.