Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 16
#1

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

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

Ошибка в алгоритме
Неправильно работает программа есть сетка (координаты x - в векторе A y - в...

Ошибка в алгоритме
Помогите найти ошибку в алгоритме. Алгоритм должен сортировать строки. void...

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

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

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

Ошибка в алгоритме сортировки
Пожалуйста укажите мне ошибку в реализуемом мною алгоритме сортировки ...

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

Ошибка в алгоритме проверки строки
Проверяю строку на корректность, все работает нормально, кроме одной вещи....

Ошибка компиляции в Алгоритме Брезенхэма
Есть код, который компилю на QT, но всё время ругается на строчку error:...

Ошибка в алгоритме слияние массивов
Этот код производит слияние двух массивов &quot;int a = {4,2,6}&quot; и &quot;b =...

Ошибка компилятора С2064 в алгоритме
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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