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

Алгоритм Дейкстры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать класс для работы с односвязным списком (ввод с клавиатуры; считывание из файла; сохранение в файл; нахождение минимума, максимума) http://www.cyberforum.ru/cpp-beginners/thread876820.html
Здравствуйте! Вот не могу понять классы . Объясните пожалуйста. Буду премного благодарен. Разработать класс для работы с односвязным списком. Класс должен включать следующие операции, совершаемые над массивами: a. Ввод из клавиатуры, b. Считывание данных из файла, c. Сохранение данных в файл, d. Нахождение минимума, максимума.
C++ Объекты класса (математика, физика, программирование, линейная алгебра, математический анализ, теоретическая механика)) Для каждого класса описать поля, характеризующие объект, и методы, позволяющие заполнять и получать значения каждого из полей. выводить значения полей на экран, а также необходимые конструкторы. Конструкторы и методы должны проверять параметры на допустимость. Определить и описать иерархию классов в следующих заданиях: Реализовать функцию, получающую и возвращающую объекты базового типа.... http://www.cyberforum.ru/cpp-beginners/thread876817.html
Разработка программного модуля вставки строки заданной длины, содержащую хотя бы один перенос, в текстовый файл C++
Желательно в программе Visual Studio c++. Тема:Разработка программного модуля вставки строки заданной длины, содержащую хотя бы один перенос, в текстовый файл.
C++ box2d и импульс в сторону курсора мыши
Добрй день уважаемые форумачане. Столкнулся наверняка с простой проблемой, но из- за неопытности не могу ее ни как решить. Есть квадрат, мне нужно его заставить по нажатию лететь в сторону курсора мыши. Пробую вот так: case SDLK_SPACE: int x,y; SDL_GetMouseState(&x,&y); ...
C++ Создать структуру order http://www.cyberforum.ru/cpp-beginners/thread876793.html
Помогите решить) Структура ORDER с полями: - расчетный счет плательщика; - расчетный счет получателя; - перечисляемая сумма в рублях. Действия с файлом структур: - сортировка записей в файле по уменьшению перечисляемых ...
C++ Из списка имен отберите палиндрономичные имена Из списка имен отберите палиндрономичные(которые читаются одинаково как слева на право, так и справа налево) имена (например Ада, Анна, Аза, Алла). Я уже кое-что накарябала, но не знаю что дальше... запуталась полностью( #include<stdio.h> #include<math.h> #include<string.h> main() {const int m=6; int k,max=0,l,i,nmax=0; char st="Anna Ada Alla Aza ", sr,*sn,*s; s=st; подробнее

Показать сообщение отдельно
Aksakov
1 / 1 / 0
Регистрация: 23.05.2013
Сообщений: 23

Алгоритм Дейкстры - C++

24.05.2013, 11:28. Просмотров 637. Ответов 0
Метки (Все метки)

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
// deikstr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <limits.h>
#include <conio.h>
 
const int N = 1000; //Количество вершин
bool adj_matrix[N][N];   /*Матрица смежности: adj_matrix[i][j] == true,
если между вершинами i и j существует вершина*/
int cost [N][N]; //Веса ребер
 
//Результаты работы алгоритма
int dist[N]; //Расстояния от заданной вершины
int parent[N]; /*Из какой вершины пришли
                Служит для восстановления маршрута*/
 
//start - вершина, от которой считаем расстояния
void dijkstra(int start)
{
     // in_tree[i] == true, если для вершины i
   // уже посчитано минимальное расстояние
   bool in_tree[N] = {false};
 
   for(int i = 0; i < N; i++)
      dist[i] = INT_MAX; // машинная бесконечность,
      // т. е. любое расстояние будет меньше данного
 
   dist[start] = 0; // Начальное расстояние равно нулю
 
   int cur = start; // вершина, с которой работаем
 
   // пока есть необработанная вершина
   while(!in_tree[cur])
   {
      in_tree[cur] = true;
 
      for(int i = 0; i < N; i++)
      {
         // если между cur и i есть ребро
         if(adj_matrix[cur][i])
         {
            // считаем расстояние до вершины i:
            // расстояние до cur + вес ребра
            int d = dist[cur] + cost[cur][i];
            // если оно меньше, чем уже записанное
            if(d < dist[i])
            {
               dist[i]   = d;   // обновляем его
               parent[i] = cur; // и "родителя"
            }
         }
      }
 
      // ищем нерассмотренную вершину
      // с минимальным расстоянием
      int min_dist = INT_MAX;
      for(int i = 0; i < N; i++)
      {
         if(!in_tree[i] && dist[i] < min_dist)
         {
            cur = i;
            min_dist = dist[i];
         }
      }
   }
 
   // Теперь:
   // в dist[i] минимальное расстояние от start до i
   // в parent[i] вершина, из которой лежит оптимальный путь в i
}
 
void main()
{
    int s;
    dijkstra(s);
    getch();
}
Мне надо организовать алгоритм Дейкстры. В чем у меня ошибка?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru