Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Транспортная задача http://www.cyberforum.ru/cpp-beginners/thread1677536.html
Здравствуйте! Помогите пожалуйста составить задачу методом минимального элемента и методом потенциалов с улучшением плана и правильным балансом в консольном режиме, в консольном режиме как составить...
C++ При чтении файла данные из него удаляются? При чтении файла данные из него удаляются? Например память занимаемая ch освободится file.read(reinterpret_cast<char*>(&ch), sizeof(ch)); http://www.cyberforum.ru/cpp-beginners/thread1677530.html
C++ Вычислить произведение последовательности
Вычислить значение конечного произведения. (формулу прикреплю) В чем ошибка? Программа работает нормально, но считает неправильно #include <iostream> #include <math.h> #include "conio.h" using...
C++ Передача в функцию строки и копирование
Что это за безобразие выводит? #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 http://www.cyberforum.ru/cpp-beginners/thread1677504.html
Всем привет. У меня не большая проблема , хочу написать функцию для исключений с помощью runtime_error. Вместо того чтобы поймать исключение и вывести на консоль моё сообщение об ошибке , я...
C++ Ошибка: error: cannot convert '<brace-enclosed initializer list>' to 'int всем привет! не могу разобраться, что это за ошибка void sum_element() { const int size = 10; int arr = {0}; int one=0, two=0; cout << "input digits - 3, 6" << endl; cin... подробнее

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

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

05.03.2016, 00:12. Просмотров 194. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru