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

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

Восстановить пароль Регистрация
 
SERN
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 14
05.03.2016, 00:12     Ошибка в алгоритме Дейкстры #1
Помогите, пожалуйста исправить ошибки в коде! Не объявлены идентификаторы "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++
Ошибка в алгоритме слияние массивов C++
Ошибка в алгоритме сортировки 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
Странно, ввожу только числа, но все равно выдает ошибку...
Yandex
Объявления
05.03.2016, 23:35     Ошибка в алгоритме Дейкстры
Ответ Создать тему
Опции темы

Текущее время: 08:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru