Форум программистов, компьютерный форум CyberForum.ru

Алгоритм Флойда - Уоршелла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сравнение методов сортировок массивов. Семестровая работа http://www.cyberforum.ru/cpp-beginners/thread210105.html
Пишу семестровую по методам сортировки массивов. В моем варианте метод прямого выбора и метод Шейкера. Надо сравнить количество перестановок для различного числа элементов массива. n = 20, 40,60,...,10000. с- количество сравнений m - количество перестановок t - время работы функции сортировки Сравнение идет на 3 видах массивов почти упорядоченный, плохо упорядоченный и случайный. Я...
C++ При чтении файла последний элемент повторяется дважды появилась необходимость выучить работу с файлами за 9 часов #include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h> int main() { http://www.cyberforum.ru/cpp-beginners/thread210099.html
Расчет средневзвешенной оценки C++
Написать программу для расчёта средневзвешенной оценки по предмету, средневзвешенной называетсяоценка, складывающаяся из 5 текущих оценок, но каждая из оценок имеет "вес" (коэффициент от 0 до 1). сумма коэффициенттов равна 1! Оценки и коэффициенты вводятся пользователем.
C++ Структура / системы координат
Здраствуйте уважаемые знатоки! Есть задача по структурам: Надо описать структуры для декартовых (x,y) и полярных (r,pi) координат. Определить функцию для перевода из полярных в декартовы координаты. В ходе решения, на сколько я понимаю, нужны будут формулы переходов с одной системы координат в другую. Заранее спасибо! Добавлено через 3 часа 27 минут куку ? =)
C++ Завернутые векторы http://www.cyberforum.ru/cpp-beginners/thread210085.html
Нужно написать програму, которая складывает два завернутых вектора фиксированной длинны. Вообщем прграма из трех файлов, выдает ошибку Linking... main.obj : error LNK2001: unresolved external symbol "public: static unsigned int w_v::sz" (?sz@w_v@@2IA) realization.obj : error LNK2001: unresolved external symbol "public: static unsigned int w_v::sz" (?sz@w_v@@2IA) C:\Documents and...
C++ Таблица лексем и таблица идентификаторов Помогите пожалуйста найти ошибку в коде. Прога строит ТИ и ТЛ. К таблице идентификаторов претензий нет, а вот в таблице лексем возникают ошибки: почему то оператор if записывает как =f и определяет его тип как:"знак". И еще когда переменной второй раз присваиваешь значение, то знак присваивания определяется почему то как знак равно "=". Ну вот допустим входной текст такой: begin i:=0x14;... подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
13.12.2010, 19:23     Алгоритм Флойда - Уоршелла
White Luna, Там вся программа алгоритм Флойда Уоршалла...

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
       void Fill()
        {
                for(size_t i=0; i<Matr.size(); ++i)
                {
                        for(size_t j=0; j<Matr.size(); ++j)
                        {
                                if(i==j)
                                        Matr[i][j]=0;
                                else if(i>j)
                                {
                                        Matr[i][j]=Matr[j][i];
                                }
                                else
                                {
                                        std::cout<<"Enter weight of V"<< i <<",V"<< j <<" edge\n"
                                                <<"0 for not connect them\n";
                                        std::cin>>Matr[i][j];
                                        if(Matr[i][j]==0)
                                                Matr[i][j]=100;
                                }
                        }
                }
        }
Это заполнение матрицы смежности.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        void Initialise()
        {
                MatrPath.resize(Matr.size());
                for(size_t i=0; i<Matr.size(); ++i)
                        MatrPath[i].resize(Matr.size());
                for(size_t i=0; i<MatrPath.size(); ++i)
                {
                        for(size_t j=0; j<MatrPath.size(); ++j)
                        {
                                if(Matr[i][j]==100)
                                        MatrPath[i][j]=100;
                                else
                                        MatrPath[i][j]=j;
                        }
                }
                Copy();
        }
Это создание матрицы путей.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        void FindPathMatr()
        {
                for(size_t k=0; k<Matr.size(); ++k)
                {
                        for(size_t i=0; i<Matr.size(); ++i)
                        {
                                for(size_t j=0; j<Matr.size(); ++j)
                                {
                                        int b=MatrSPath[i][k]+MatrSPath[k][j];
                                        if(b<MatrSPath[i][j])
                                        {
                                                MatrSPath[i][j]=b;
                                                MatrPath[i][j]=k;
                                        }
                                }
                        }
                }
        }
Инициализация матрицы кратчайших путей нужными значениями.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        void FindPath(size_t first, size_t second)
        {
                if(first>=MatrPath.size() || second>=MatrPath.size())
                        throw std::invalid_argument("One of nodes for searching is more than Matr size");
                ST Goals;
                Path.push(first);
                Goals.push(second);
                while(!Goals.empty())
                {
                        int u=Path.top();
                        int v=Goals.top();
                        int s=MatrPath[u][v];
                        if(v==s)
                        {
                                Path.push(v);
                                Goals.pop();
                        }
                        else
                                Goals.push(s);
                }
        }
Это нахождение пути от вершины к другой вершине. Вершины вводятся из main-а с клавиатуры. Через два стека. Не самый оптимальный алгоритм. У меня есть оптимальнее на бумаге, но переделывать пока лень.
 
Текущее время: 22:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru