У меня возникли проблемы с алгоритмом Беллмана-Форда. Это моя попытка, и я получаю результат «Нет пути», который отличается от ожидаемого: «A E». Может ли кто-нибудь объяснить, что не так с моим кодом, и, возможно, найти решение?
void BF(int G[MAX_NODES][MAX_NODES], int n, int BFValue[], int BFPrev[]) {
for (int i = 0; i < n; ++i) {
BFValue = MAX_VALUE;
BFPrev = -1;
}
int src = 0; // Assuming 'A' is the source
BFValue[src] = 0;
for (int k = 0; k < n - 1; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (G[j] && BFValue + G[j] < BFValue[j]) {
BFValue[j] = BFValue + G[j];
BFPrev[j] = i;
}
}
}
}
}
string BF_Path(int G[MAX_NODES][MAX_NODES], int n, char srcChar, char destChar) {
int BFValue[MAX_NODES], BFPrev[MAX_NODES];
BF(G, n, BFValue, BFPrev);
int src = srcChar - 'A';
int dest = destChar - 'A';
int path[MAX_NODES], pathLength = 0;
// Reconstruct the path in reverse
for (int at = dest; at != -1; at = BFPrev[at]) {
path[pathLength++] = at;
}
if (pathLength == 1 && src != dest) { // If pathLength is 1, only dest was added and there's no path from src to dest
return "No path";
}
// Construct path string in the correct order
string pathStr = "";
for (int i = pathLength - 1; i >= 0; --i) {
pathStr += (char)('A' + path);
if (i > 0) {
pathStr += " ";
}
}
return pathStr;
}
int main() {
std::ifstream fin;
int G[20][20];
int BFValue[20];
int BFPrev[20];
fin.open("inMat2.txt");
int n = 8;
for (int i = 0; i < n; i++) {
BFValue = -1;
BFPrev = -1;
for (int j = 0; j < n; j++) {
fin >> G[i][j];
}
}
cout
Подробнее здесь: https://stackoverflow.com/questions/785 ... -algorithm
Проблемы, связанные с алгоритмом Беллмана-Форда [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1717263612
Anonymous
У меня возникли проблемы с алгоритмом Беллмана-Форда. Это моя попытка, и я получаю результат «Нет пути», который отличается от ожидаемого: «A E». Может ли кто-нибудь объяснить, что не так с моим кодом, и, возможно, найти решение?
void BF(int G[MAX_NODES][MAX_NODES], int n, int BFValue[], int BFPrev[]) {
for (int i = 0; i < n; ++i) {
BFValue[i] = MAX_VALUE;
BFPrev[i] = -1;
}
int src = 0; // Assuming 'A' is the source
BFValue[src] = 0;
for (int k = 0; k < n - 1; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (G[i][j] && BFValue[i] + G[i][j] < BFValue[j]) {
BFValue[j] = BFValue[i] + G[i][j];
BFPrev[j] = i;
}
}
}
}
}
string BF_Path(int G[MAX_NODES][MAX_NODES], int n, char srcChar, char destChar) {
int BFValue[MAX_NODES], BFPrev[MAX_NODES];
BF(G, n, BFValue, BFPrev);
int src = srcChar - 'A';
int dest = destChar - 'A';
int path[MAX_NODES], pathLength = 0;
// Reconstruct the path in reverse
for (int at = dest; at != -1; at = BFPrev[at]) {
path[pathLength++] = at;
}
if (pathLength == 1 && src != dest) { // If pathLength is 1, only dest was added and there's no path from src to dest
return "No path";
}
// Construct path string in the correct order
string pathStr = "";
for (int i = pathLength - 1; i >= 0; --i) {
pathStr += (char)('A' + path[i]);
if (i > 0) {
pathStr += " ";
}
}
return pathStr;
}
int main() {
std::ifstream fin;
int G[20][20];
int BFValue[20];
int BFPrev[20];
fin.open("inMat2.txt");
int n = 8;
for (int i = 0; i < n; i++) {
BFValue[i] = -1;
BFPrev[i] = -1;
for (int j = 0; j < n; j++) {
fin >> G[i][j];
}
}
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78564500/problems-regarding-bellman-ford-algorithm[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия