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

Ошибка в алгоритме Дейкстры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Транспортная задача http://www.cyberforum.ru/cpp-beginners/thread1677536.html
Здравствуйте! Помогите пожалуйста составить задачу методом минимального элемента и методом потенциалов с улучшением плана и правильным балансом в консольном режиме, в консольном режиме как составить эту задачу я вообще не понимаю. Условие задачи только с правильным балансом
Кроссплатформенная разработка Размер консоли в Code::Blocks в Ubuntu В общем, поставил на mac VirtualBox, установил Ubuntu 14.04.3, поставил Code::Blocks. Теперь при запуске проекта вылазит консоль с микроскопическим размером текста. Подскажите, как его увеличить? П.С. правой кнопкой мыши на заголовок консоли не помогает, там тупо нет пункта настройки внешнего вида консоли http://www.cyberforum.ru/cpp-beginners/thread1677531.html
C++ При чтении файла данные из него удаляются?
При чтении файла данные из него удаляются? Например память занимаемая ch освободится file.read(reinterpret_cast<char*>(&ch), sizeof(ch));
C++ Вычислить произведение последовательности
Вычислить значение конечного произведения. (формулу прикреплю) В чем ошибка? Программа работает нормально, но считает неправильно #include <iostream> #include <math.h> #include "conio.h" using namespace std; int main() {
C++ Передача в функцию строки и копирование http://www.cyberforum.ru/cpp-beginners/thread1677522.html
Что это за безобразие выводит? #include <iostream> #include <cstring> using namespace std; const int MAX = 80; void reversit(char ); int main() { setlocale(LC_ALL,"RUS"); char array;
C++ Функция для runtime_error Всем привет. У меня не большая проблема , хочу написать функцию для исключений с помощью runtime_error. Вместо того чтобы поймать исключение и вывести на консоль моё сообщение об ошибке , я получаю ошибку от системы( Посмотрите код , подскажите что не так , заранее благодарен. Пишу на vs 2015 Вот код: подробнее

Показать сообщение отдельно
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 14

Ошибка в алгоритме Дейкстры - C++

05.03.2016, 00:12. Просмотров 174. Ответов 4
Метки (Все метки)

Помогите, пожалуйста исправить ошибки в коде! Не объявлены идентификаторы "all" "information" "output", в некоторых местах отсутствуют ";".
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
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <conio.h>
using namespace std;
char s[80], path[80][11];
bool scan_matr(int **vertex, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
        for (j = i + 1; j < n; j++)
        {
            cout << "enter lenth behind x" << i + 1 << " and x" << j + 1 << ": ";
            cin >> vertex[i][j];
            if ((vertex[i][j] > 65536) || (vertex[i][j] < 0))
            {
                cout << "Vrong input" << endl;
                _getch();
                return 0;
            }
            cout << endl;
        }
    return 1;
}
void null_matr(int **vertex, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (vertex[i][j] == 0)
                vertex[i][j] = 65535;
}
void print_matr(int **vertex, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << vertex[j][i] << " ";
        cout << endl << endl;
    }
}
int dextra(int **vertex, int *flag, int *len, int n, int xk, int p)
{
    int i;
    for (i = 1; i <= n; i++)
    {
        _itoa_s(1, s, 100);
        strcpy_s(path[i], "X");
        strcat_s(path[i], s);
    }
    do
    {
        for (i = 0; i < n; i++)
            if ((vertex[p][i] != 65535) && (!*(flag + i)) && (i != p))
            {
                if (*(len + i) > *(len + p) + vertex[p][i])
                {
                    _itoa_s(i + 1, s, 100);
                    strcpy_s(path[i + 1], path[p + 1]);
                    strcat_s(path[i + 1], "-X");
                    strcat_s(path[i + 1], s);
                }
                *(len + i) = *(len + i) < (*(len + p) + vertex[p][i]) ? *(len + i) : (*(len + p) + vertex[p][i]);
            }
        for (i = 0; i < n; i++)
            if (!*(flag + i)) p = i;
        for (i = 0; i < n; i++)
            if ((*(len + p) > *(len + i)) && (!*(flag + i))) p = i;
        *(flag + p) = 1;
    } while (p != xk);
    return p;
}
void main(int argc, char *argv[])
{
    int i, j; // kounters
    int n, p; // vertex count
    int xn, xk; // start and end points
    cout << "Enter nuber of vertexes: ";// entering number of vertexes
    cin >> n;
    if ((n > 65536) || (n <= 1))
    {
        cout << "Vrong input" << endl;
        _getch();
        return;
    }
    cout << endl;
    int *len = new int[n];// new arrays lanth of way
    int *flag = new int[n];// flag check or not
    int **vertex = new int *[n];// matrix of ways
    for (i = 0; i < n; i++)//
        vertex[i] = new int[n];//
    for (i = 0; i < n; i++)// init matrix
        for (j = 0; j < n; j++)//
            vertex[i][j] = 0;//
    if (!scan_matr(vertex, n))// enter ways
        return;//
               //
    print_matr(vertex, n);// print matryx of ways
    null_matr(vertex, n);// 0 <- 65536 max value
    cout << "Start point: ";// enter start pint
    cin >> xn;// 
    if ((xn > 65536) || (xn <= 0))//
    {//
        cout << "Vrong input" << endl;//
        _getch();//
        return;//
    }//
    cout << "End point: ";// enter end point
    cin >> xk;// 
    if ((xk > 65536) || (xk <= 0))
    {
        cout << "Vrong input" << endl;
        _getch();
        return;
    }
    cout << endl;
    xk--;// 
    xn--;// array starts from 0 -> ;)))
    if (xn == xk)// compare start point and end point
    {//
        cout << "No way to run, no way to go..." << endl; // the points are same
        _getch();//
        return;//
    }//
    for (i = 0; i < n; i++)//clearing flags
    {//lenth = 65536
        flag[i] = 0;//
        len[i] = 65535;//
    }//
    len[xn] = 0;//
    flag[xn] = 1;//
    p = dextra(vertex, flag, len, n, xk, xn);// Dextra algorithm
    output all information
        if (len[p] != 65535)
        {
            ofstream out("Result.txt", ios::out);
            out.clear();
            out << "Way: " << path[p + 1] << endl;
            out << "Way lenth: " << len[p] << endl;
            cout << "Way: " << path[p + 1] << endl;
            cout << "Way lenth: " << len[p] << endl;
            out.close();
        }
        else
            cout << "no such way!" << endl;
    _getch();
    delete vertex;
    delete len;
    delete flag;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru