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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 14
#1

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

05.03.2016, 00:12. Просмотров 182. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2016, 00:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в алгоритме Дейкстры (C++):

Ошибка в алгоритме - C++
Помогите найти ошибку в алгоритме. Алгоритм должен сортировать строки. void SortArrayString(string *&amp;arr, int n, char arr2) /* arr...

Ошибка в алгоритме - C++
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из известных точек проложить кратчайший...

Ошибка в алгоритме сортировки - C++
Пожалуйста укажите мне ошибку в реализуемом мною алгоритме сортировки #include &lt;iostream&gt; using namespace std; int main() ...

функции. (ошибка в алгоритме) - C++
задание было написать программу для вычисления с заданной точностью. так вот с функцией оно не работает, т.е. результат sum и результат...

Ошибка в алгоритме со строками - C++
По условию задачи, вводится строка со словами, необходимо вывести на экран слово, в котором наименьшее число повторяющихся букв. Т.е....

Ошибка в алгоритме Хаффмана. С++ - C++
Проблемы с реализацией алгоритма Хаффмана. Код по идее должен быть рабочим, но выскакивает такое окно. Не знаю как исправить. Помогите,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Juffin
50 / 50 / 16
Регистрация: 24.12.2011
Сообщений: 133
05.03.2016, 12:18 #2
C++
1
output all information
Эту строку удали. Точек с запятой вроде везде хватает.
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 14
05.03.2016, 20:57  [ТС] #3
Да, удаление помогло, но при запуске программы выдает данную ошибку(см. ниже) Не подскажите, что это?
Миниатюры
Ошибка в алгоритме Дейкстры  
Juffin
50 / 50 / 16
Регистрация: 24.12.2011
Сообщений: 133
05.03.2016, 23:31 #4
SERN,
C++
1
2
cin >> xk;
    if ((xk > 65536) || (xk <= 0))
На этом моменте что-то не так с вводом. Нужно ввести число, а вы вводите не число.
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 14
05.03.2016, 23:35  [ТС] #5
Странно, ввожу только числа, но все равно выдает ошибку...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2016, 23:35
Привет! Вот еще темы с ответами:

Ошибка компиляции в Алгоритме Брезенхэма - C++
Есть код, который компилю на QT, но всё время ругается на строчку error: 'setPixel' was not declared in this scope Что бы я вместо...

Ошибка компилятора С2064 в алгоритме - C++
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; using namespace std; int I = 3; bool...

Ошибка в алгоритме слияние массивов - C++
Этот код производит слияние двух массивов &quot;int a = {4,2,6}&quot; и &quot;b = {645,998,333}&quot; в массив &quot;c&quot; #include &quot;stdafx.h&quot; #include...

Ошибка в алгоритме перемножения двух матриц - C++
Ошибка в алгоритме произведения двух матриц. Я так понял, что где-то выходит за границы массивов. private: void com(int size, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.03.2016, 23:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru