Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Добавить элемент со значением D в конец очереди Дано число D и указатели P1 и P2 на начало и конец очереди, содержащей не менее двух элементов. Добавить элемент со значением D в конец очереди и извлечь из очереди первый (начальный) элемент. Вывести значение извлеченного элемента и новые адреса начала и конца очереди. После извлечения элемента из очереди освободить память, занимаемую этим элементом. https://www.cyberforum.ru/ cpp-beginners/ thread2817432.html C++ Наследование: почему вызывается метод базового класса, не смотря на использование ключевого слова virtual?
Привет! Делаю лабораторную работу по ООП. По заданию нужно сделать систему классов для работы с плоскими фигурами. Столкнулся с проблемой: при попытке вызвать метод для работы с определенной фигурой, вызывается метод класса-родителя. Не могу понять, где я ошибаюсь. Прошу подсказать. Базовый класс: class Shape { public: virtual string name() { return " "; }; virtual int ptsSize() =...
C++ Сортировка строк в лексикографическом порядке https://www.cyberforum.ru/ cpp-beginners/ thread2817427.html
Доброго времени суток! Помогите пожалуйста написать код на языке " СИ " с комментариями , который будет выполнять лексикографическую сортировку строк. Имеется текст, состоящий из n(n <= 20) строк, который вводится с клавиатуры. Длина каждой строки не превосходит 128 символов. В каждой строке содержится не менее двух слов. Количество слов в строке не более 20. .
C++ Как сделать, чтобы чередовались имена игроков при ходе одного из игроков? https://www.cyberforum.ru/ cpp-beginners/ thread2817421.html
есть 2 переменные name1 и name2 так вот мне желательно нужно что бы и при первом ходе отображалось имя 1 игрока, а после 2, был бы очень благодарен за помощь! Так же хотелось бы спросить на каком движке лучше всего будет попробовать написать 2д игру на c++ что похожее на terraria только более приближённую к реальности (не в плане графики, а в плане геймплея ) просто с++ учу первый год и честно...
Чтение текстового файла и вывод C++
Как прочитать текстовый файл и вывести в 21 строку по 30 цифр в строке
C++ Двумерные масивы https://www.cyberforum.ru/ cpp-beginners/ thread2817401.html
Нужно автоматически заполнить массив "змейкой", что б он выглядел примерно так 1 10 11 20 21 2 9 12 19 22 3 8 13 18 23 4 7 14 17 24 5 6 15 16 25
C++ Заполнить массив значениями функции, вычисленными по заданному изначально массиву https://www.cyberforum.ru/ cpp-beginners/ thread2817395.html
Приветствую, имеется задача: задан массив значений W = . Необходимо вычислить с помощью этого массива значения функции U = 3*ln(2*W) и сохранить результаты во второй массив (#2). После этого, используя значения из второго массива, вычислить функцию X = U +3 и сохранить результаты в третий массив(#3), чтобы при необходимости можно было в дальнейшем использовать данные из массивов #2 и #3. Прошу...
localtime C++
Как сравнить текущее время с тем которое мне нужно?
C++ Вывести самое длинное слово в текстовом файле и его длину Работать нужно с файлами, а не строками https://www.cyberforum.ru/ cpp-beginners/ thread2817390.html C++ Структура: Вывести на печать перечень больных по каждой палате и отдельно по каждому диагнозу https://www.cyberforum.ru/ cpp-beginners/ thread2817389.html
Нужно решить такую задачу. В больнице имеется общий список больных, каждый из которых характеризуется записью: Struct zap { fio:string; np:integer; dgn:string;} где fio – фамилия и инициалы больного, np – номер палаты, dgn – диагноз. Требуется вывести на печать перечень больных по каждой палате и отдельно по каждому диагнозу. Разместить больных по палатам так, чтобы больные с одинаковым...
В списке L из каждой группы подряд идущих элементов с равными значениями оставить только один C++
В списке L из каждой группы подряд идущих элементов с равными значениями оставить только один
C++ Что означает запись int ** Что означает запись int ** wskInt2D = nullptr void ZLab09::skalar() { cout << "--->Skalar" << endl; wskInt1D = new int; *wskInt1D = 5; cout << "*wskInt1D = " << *wskInt1D << endl << "*wskInt1D + 3 = " << *wskInt1D + 3 << endl https://www.cyberforum.ru/ cpp-beginners/ thread2817384.html
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 3
0

Найти алгоритмом Дейкстры кратчайший путь между двумя заданными вершинами - C++ - Ответ 15433669

20.04.2021, 18:29. Показов 1065. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Срочно нужна помощь. Уже через часов 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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std ;
 
int SIZE;
int main()
{
 
    setlocale(LC_ALL, "RUSSIAN");
    //Создаем файловый поток и связываем его с файлом
    ifstream in("input.txt");
    if (in.is_open()){
        //Если открытие файла прошло успешно
        //Вначале посчитаем сколько чисел в файле
        int count = 0;// число чисел в файле
        int temp1;//Временная переменная
 
        while (!in.eof())// пробегаем пока не встретим конец файла eof
        {
            in >> temp1;//в пустоту считываем из файла числа
            count++;// увеличиваем счетчик числа чисел
        }
 
        //Число чисел посчитано, теперь нам нужно понять сколько
        //чисел в одной строке
        //Для этого посчитаем число пробелов до знака перевода на новую строку
 
        //Вначале переведем каретку в потоке в начало файла
        in.seekg(0, ios::beg);
        in.clear();
 
        //Число пробелов в первой строчке вначале равно 0
        int count_space = 0;
        char symbol;
 
        while (!in.eof())//на всякий случай цикл ограничиваем концом файла
        {
        //теперь нам нужно считывать не числа, а посимвольно считывать данные
        in.get(symbol);//считали текущий символ
        if (symbol == ' ') count_space++;//Если это пробел, то число пробелов увеличиваем
        if (symbol == '\n') break;//Если дошли до конца строки, то выходим из цикла
        }
        //cout << count_space << endl;
 
        //Опять переходим в потоке в начало файла
        in.seekg(0, ios::beg);
        in.clear();
 
        //Теперь мы знаем сколько чисел в файле и сколько пробелов в первой строке.
        //Теперь можем считать матрицу.
 
        SIZE = count / (count_space + 1);//число строк
 
    int a[SIZE][SIZE]; // матрица связей
    int d[SIZE]; // минимальное расстояние
    int v[SIZE]; // посещенные вершины
    int temp, minindex, min;
    int begin_index = 0;
    system("chcp 1251");
    system("cls");
//    // Инициализация матрицы связей
//    for (int i = 0; i<SIZE; i++){
//        a[i][i] = 0;
//        for (int j = i + 1; j<SIZE; j++) {
//            printf("Введите расстояние %d - %d: ", i + 1, j + 1);
//            scanf("%d", &temp);
//            a[i][j] = temp;
//            a[j][i] = temp;
//        }
//    }
//    // Вывод матрицы связей
//    for (int i = 0; i<SIZE; i++){
//        for (int j = 0; j<SIZE; j++)
//            printf("%5d ", a[i][j]);
//            printf("\n");
//    }
 
    for (int i=0; i < SIZE; i++){
        for (int j=0; j<SIZE; j++){
            in >> a[i][j];
        };
    };
    for (int i=0; i < SIZE; i++){
        for (int j=0; j<SIZE; j++){
            cout << a[i][j] << '\t';
        };
    cout << endl;
    };
 
    //Инициализация вершин и расстояний
    for (int i = 0; i<SIZE; i++){
        d[i] = 10000;
        v[i] = 1;
    }
    d[begin_index] = 0;
    // Шаг алгоритма
    do {
        minindex = 10000;
        min = 10000;
        for (int i = 0; i<SIZE; i++){ // Если вершину ещё не обошли и вес меньше min
            if ((v[i] == 1) && (d[i]<min)){ // Переприсваиваем значения
                min = d[i];
                minindex = i;
            }
        }
        // Добавляем найденный минимальный вес
        // к текущему весу вершины
        // и сравниваем с текущим минимальным весом вершины
        if (minindex != 10000){
            for (int i = 0; i<SIZE; i++){
                if (a[minindex][i] > 0){
                    temp = min + a[minindex][i];
                    if (temp < d[i]){
                        d[i] = temp;
                    }
                }
            }
            v[minindex] = 0;
        }
    }
    while (minindex < 10000);
    // Вывод кратчайших расстояний до вершин
    printf("\nКратчайшие расстояния до вершин: \n");
        for (int i = 0; i<SIZE; i++)
            printf("%5d ", d[i]);
 
    // Восстановление пути
    int ver[SIZE]; // массив посещенных вершин
    int end = 4; // индекс конечной вершины = 5 - 1
    ver[0] = end + 1; // начальный элемент - конечная вершина
    int k = 1; // индекс предыдущей вершины
    int weight = d[end]; // вес конечной вершины
 
    while (end != begin_index) // пока не дошли до начальной вершины
    {
        for (int i = 0; i<SIZE; i++) // просматриваем все вершины
            if (a[i][end] != 0)   // если связь есть
            {
            int temp = weight - a[i][end]; // определяем вес пути из предыдущей вершины
                if (temp == d[i]) // если вес совпал с рассчитанным
                {                 // значит из этой вершины и был переход
                    weight = temp; // сохраняем новый вес
                    end = i;       // сохраняем предыдущую вершину
                    ver[k] = i + 1; // и записываем ее в массив
                    k++;
                }
            }
    }
    // Вывод пути (начальная вершина оказалась в конце массива из k элементов)
    printf("\nВывод кратчайшего пути\n");
        for (int i = k - 1; i >= 0; i--)
            printf("%3d ", ver[i]);
            getchar(); getchar();
    }
    else{
        cout << "Error!";
    }
    return 0;
}


Вернуться к обсуждению:
Найти алгоритмом Дейкстры кратчайший путь между двумя заданными вершинами C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2021, 18:29
Готовые ответы и решения:

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

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

Нужна программа - Найти кратчайший путь между двумя заданными вершинами графа
Ребят, у кого есть программа на С++ или текст программы: Найти кратчайший путь между двумя...

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

0
20.04.2021, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2021, 18:29
Помогаю со студенческими работами здесь

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

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

Кратчайший путь между двумя вершинами!!!
Кратчайший путь между двумя вершинами!!! нид хелп с реализацией на Си ! Приклеплен вариант на С++ и...

Найти путь наименьшей длины между двумя заданными вершинами с помо щью нерекурсивного перебора с возвратом
Найти путь наименьшей длины между двумя заданными вершинами с помощью нерекурсивного перебора с...

Найти путь наименьшей длины между двумя заданными вершинами с помо щью нерекурсивного перебора с возвратом
Найти путь наименьшей длины между двумя заданными вершинами с пом ощью нерекурсивного перебора с...

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru