0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 25
1

Не запускаеться код. Алгоритмы и структура данных

21.12.2021, 13:45. Показов 342. Ответов 0

Author24 — интернет-сервис помощи студентам
Задали по учёбе тему "Сравнительный анализ алгоритмов Беллмана-Форда и Флойда-Уоршелла". Нашла в интернете код по этой теме, но не могу его запустить. Помогите пожалуйста разобраться что не так, и если можно исправить это, ибо в с++ не разбираюсь особо. Код прикрепляю в текстовом документе, буду очень благодарна помощи

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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
using namespace std;
#include <iostream>
#define TRUE 1
#define FALSE 0
#define MaxNodes 5 //Кількість вершин
//Описе типу вузла стеку
typedef struct Zveno* svqz;
typedef struct Zveno
{
    int Element;
    svqz Sled;
};
class Spisok
{
private:
    int Mas[MaxNodes][MaxNodes]; //Матриця ваг ребер
    int DD[MaxNodes][MaxNodes]; //Матриця відстаней
    int SS[MaxNodes][MaxNodes]; //Матриця послідовних вершин
    svqz Stack; //Вказівник на робочий стек
    void UDALENIE(svqz*, int*);
    void W_S(svqz*, int);
    void Small_Put(int, int);
public:
    Spisok() { Stack = NULL; }
    void Vvod_Ves();
    void Reshenie();
};
void main(){
    Spisok A;
    A.Vvod_Ves();
    A.Reshenie();
}
void Spisok::Small_Put(int one, int two)
//Знаходження найкоротшого шляху
{
    svqz St = NULL; //Вказівник на додатковий стек
    svqz UkZv;
    int Flag = FALSE; //Флаг побудови найкоротшого шляху
    int elem1, elem2, k;
    //Переміщення в стек кінцевої та початкової вершин
    W_S(&Stack, two);
    W_S(&Stack, one);
    while (!Flag)
    {
        UDALENIE(&Stack, &elem1);
        UDALENIE(&Stack, &elem2);
        if (SS[elem1][elem2] == elem2) //Якщо є шлях...
            if (elem2 == two) // і це кінцевий вузел...
            {
                Flag = TRUE; //то найкоротштй шлях знайдено
                W_S(&St, elem1);
                W_S(&St, elem2);
            }
            else //це не кінцевий вузел...
            {
                    W_S(&St, elem1); //В додатковий стек
                W_S(&Stack, elem2); //В робочий стек
            }
        else //Якщо шляху немає
        {
            W_S(&Stack, elem2); //В робочий стек
            k = SS[elem1][elem2];
            W_S(&Stack, k); //Запам’ятати проміжну вершину
            W_S(&Stack, elem1); //В робочий стек
        }
    }
    UkZv = St;
    while (UkZv != NULL)
    {
        cout << (UkZv->Element + 1) << " ";
        UkZv = UkZv->Sled;
    }
    cout << endl;
}
void Spisok::W_S(svqz* stk, int Elem)
//Переміщення Elem в стек stk.
{
    svqz q = new (Zveno);
    (*q).Element = Elem;
    (*q).Sled = *stk; *stk = q;
}
void Spisok::UDALENIE(svqz* stk, int* Klad)
//Видалення з стеку, заданого вказівником *stk.
{
    svqz q;
        if (*stk == NULL) cout << "Спроба вибору з порожнього стеку!\n";
        else
        {
            *Klad = (**stk).Element;
            q = *stk; *stk = (**stk).Sled; delete q;
        }
}
void Spisok::Vvod_Ves()
//Введення матриці ваг ребер заданого графу
{
    cout << "Введення по рядкам:\n";
    for (int i = 0; i < MaxNodes; i++)
        for (int j = 0; j < MaxNodes; j++)
        {
            cout << "Введите Mas[" << (i + 1) << "," << (j + 1) << "]: ";
            cin >> Mas[i][j];
        }
}
void Spisok::Reshenie()
{
    int one, two;
    int i, j;
    //Иніціалізація
    for (i = 0; i < MaxNodes; i++)
        for (j = 0; j < MaxNodes; j++)
        {
            if (Mas[i][j] > 0) SS[i][j] = j;
            else SS[i][j] = 0;
            DD[i][j] = Mas[i][j];
        }
    cout << "\nПочаткова вершина: ";
    cin >> one; one--;
    cout << "Кцнцева вершина: ";
    cin >> two; two--;
    int ved = 0;
    while (ved < MaxNodes)
    {
        for (i = 0; i < MaxNodes; i++)
            for (j = 0; j < MaxNodes; j++)
                if (i != j && i != ved && j != ved &&
                    DD[i][ved] > 0 && DD[ved][j] > 0)
                    if (DD[i][ved] + DD[ved][j] < DD[i][j] || DD[i][j] == 0)
                    {
                        DD[i][j] = DD[i][ved] + DD[ved][j];
                        SS[i][j] = ved;
                    }
        ved++;
    }
    i = one;
    if (SS[i][two] != two && SS[i][two] != 0)
        while (SS[i][two] != two)
        {
            j = SS[i][two];
            while (SS[i][j] != j) j = SS[i][j];
            i = j;
        }
        cout << "\n Найкоротший шлях : ";
    Small_Put(one, two);
    cout << "Довжина шляху: " << DD[one][two];
}
#include <iostream>
#define inf 100000
using namespace std;
struct Edges {
    int u, v, w;
};
const int Vmax = 1000;
const int Emax = Vmax * (Vmax - 1) / 2;
int i, j, n, e, start;
Edges edge[Emax];
int d[Vmax];
void bellman_ford(int n, int s) {
    int i, j;
    for (i = 0; i < n; i++)
        d[i] = inf;
    d[s] = 0;
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < e; j++)
            if (d[edge[j].v] + edge[j].w < d[edge[j].u])
                d[edge[j].u] = d[edge[j].v] + edge[j].w;
    for (i = 0; i < n; i++)
        if (d[i] == inf)
            cout << " " << "-1";
        else
            cout << " " << d[i];
    cout << endl;
}
/* Example
4
0 1 6 0
0 0 4 1
0 0 0 0
0 0 1 0
*/
int main (){
    int w;
    cout << "Number of verticies: "; cin >> n;
    e = 0;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++) {
                cin >> w;
            if (w != 0) {
                edge[e].v = i;
                edge[e].u = j;
                edge[e].w = w;
                e++;
            }
        }
    cout << "\n Adjacency matrix:\n";
    for (start = 1; start < n + 1; start++)
        bellman_ford(n, start - 1);
    system("pause");
}
 
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
    int n, i, j, k;
    cout << "Number of vertecies: ";
    cin >> n;
    int a[n][n];
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    /*
    4
    0 1 6 -1
    -1 0 4 1
    -1 -1 0 -1
    -1 -1 1 0
    */
    for (k = 0; k < n; k++) {
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                if (i != j && a[i][k] != -1 && a[k][j] != -1) {
                    if (a[i][j] == -1) {
                        a[i][j] = a[i][k] + a[k][j];
                    }
                    else {
                        a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
                    }
                }
            }
        }
    }
    cout << "\n Adjacency matrix:\n";
    cout << endl;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
                cout << " " << a[i][j];
        }
        cout << endl;
    }
    return 0;
}
Вложения
Тип файла: txt code.txt (5.7 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2021, 13:45
Ответы с готовыми решениями:

Структура и алгоритмы обработки данных
Дана последовательность символов s1,s2..Известно,что s1 отличен от точки и,что среди s2,s3.....

структура и алгоритмы обработки данных в эвм
В ответ введите через пробел элементы третьей строки матрицы смежности. и матрицы инциденци как...

Структура данных стек (код)
Добрый вечер! Помогите пожалуйста разобраться с кодом... почти ничего не понятно... #include...

Есть Lua скрипт но он не запускаеться а код не читаем
Здравствуйте есть lua скрипт помогите его раскодировать,он когда в блокноте или нотепаде++...

0
21.12.2021, 13:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2021, 13:45
Помогаю со студенческими работами здесь

База Данных (не запускаеться прога)
Есть программа по работе с БД Вывод, добавление записи, удаление записи, сортировка и поиск Но...

Структура(ошибка в лабе(структура в структуре b чтение данных через txt)
Даны две структуры содержащие &quot;афоризмы&quot; и &quot;пословицы&quot;, которые объединяются в другой структуре,...

Алгоритмы сортировки массивов.Реализуйте алгоритмы сортировок данных массивов
Задания к лабораторной работе. Выполните приведенные ниже задания. 1. Даны два целочисленных...

Структуры и алгоритмы обработки данных. Создать базу данных пользователей Интернет
Создать базу данных пользователей Интернет (имя пользователя, текущий счет, привилегированность...

Алгоритмы целостности данных, корректность данных, литература
Добрый день. Есть много таблиц-источников, на основании которых ежедневно рассчитывается одна...

Объяснить код алгоритмы Дейкстры
Есть код алгоритмы Дейкстры поиска кратчайших путей во взвешенном ориентированном графе. Объясните,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru