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

Вывод пути (алгоритм Дейкстры) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Winsock C++ клиент - сервер http://www.cyberforum.ru/cpp-beginners/thread1198387.html
#include <winsock2.h> // сервер #include <iostream> using namespace std; int main(){ // инициализация winsock WSADATA WSAData; if (WSAStartup (MAKEWORD(1,1), &WSAData)!=0) { cout << "WSAStartup faild. Error:" << WSAGetLastError();
C++ Сравнение дат, не работает функция Ребят, помогите пожалуйста исправить функцию. Я должна сделать программу с таким заданием: Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date с полями: год, месяц и день. Определить полный набор методов сравнения дат. Моя программа правильно работает, что касается с числами. Но последнюю функцию(сравнение дат) она не выполняет. :(... http://www.cyberforum.ru/cpp-beginners/thread1198381.html
Генерация псевослучайных чисел (метод Неймана) C++
Как задать цикл, что 100 цифр. Задаётся число и отбрасывает 2 последние цифры, и дальше с новым числом работать и так 100 раз. Помогите
C++ Заполнить матрицу по заданному образцу
Здравствуйте. Помогите пожалуйста с задачей, уже несколько дней сижу,ничего не получается. Задано число N(может быть четным или нечетным). Заполнить элементы массива по заданному образцу. То есть нужен некоторый алгоритм который заполняет элементы массива по особенному , после того как введем число N с клавиатуры Найти несколько вариантов и найти самый быстрый. образец: при вводе N=5...
C++ Многопоточность, выход из бесконечного цикла c++11 http://www.cyberforum.ru/cpp-beginners/thread1198343.html
Всем привет. Я в задачах многопоточности - новичок (начал ей заниматься буквально несколько часов назад), инфу искал, читал, но как-то пока не помогает. Столкнулся с задачей (с++11 std::thread) код не оригинальный, а упрощённый, чтобы показать саму суть, подразумевается, что все необходимые include'ы уже есть. есть class SomeClass { private: bool _stopCycle;
C++ Вычислите сумму элементов целочисленной матрицы, ниже побочной диагонали Дана целочисленная матрица. Вычислите сумму элементов матрицы, ниже побочной диагонали. Выведите на экран исходный массив и результат вычисления. подробнее

Показать сообщение отдельно
iliya785
22 / 22 / 8
Регистрация: 04.06.2014
Сообщений: 80
05.06.2014, 01:45     Вывод пути (алгоритм Дейкстры)
в матрице ошибка теперь работает
C++
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int n = 10;
const int inf = 1000*1000*1000;
 
int start, g[n][n]=
     {
        {0, 20, 25, 30, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 5, 0, 10, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 10, 15, 0, 0, 0},
        {0, 0, 0, 0, 25, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 15, 0, 5, 10, 20},
        {0, 0, 0, 0, 15, 0, 10, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 15, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 10},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 10},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    };
 
int main()
{
    vector <int> d(n+5,inf),p(n+5,-1);
    vector <bool> used(n+5);
    int start = 0, finish = 9,mn,u;
    d[start] = 0;
    for (int i=0;i<n;++i){
        mn = inf, u = -1;
        for (int j=0;j<n;++j)
            if (!used[j] && d[j] < mn)
                mn = d[j], u = j;
        if (u == -1)    break;
        used[u] = true;
        for (int j=0;j<n;++j)
            if (d[j] > d[u] + g[u][j] && g[u][j] > 0 )
                d[j] = d[u] + g[u][j], p[j] = u;
    }
    vector <int> v;
    if (p[finish] == -1)
        cout<<"No way\n";
    else{
        for (int u = finish ; u != -1; u = p[u])
            v.push_back(u);
        reverse(v.begin(),v.end());
        for (int i=0;i<v.size();++i){
            if (i > 0)    cout<<"->";
            cout<<v[i];
        }
    }
    cout<<"\n"<<d[finish]<<"\n";
}
Добавлено через 1 минуту
также нужно было указать ориентированный граф или нет

Добавлено через 30 секунд
теперб уж точно всё? :-)
 
Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru