Дает ориентированный взвешенный граф с ребрами, вес которых может быть отрицательным. Найдите длину самого длинного пути от первой до последней вершины. Если такого пути не существует, выведите ":(". Если такой путь бесконечно длинный, выведите ":)".
Мой код работает правильно для 21 тестовых случаев из 22 Проблема в том, что я не могу подобрать тесты, код которых работает некорректно. Вот мой код:
Код: Выделить всё
#include
#include
#include
using namespace std;
struct Node
{
int val = 0;
bool isNull = true;
};
struct Edge
{
int from;
int to;
int cost;
};
int main()
{
int n, m;
cin >> n >> m;
vector nodes(n);
vector edges(m);
for (int i = 0; i < m; i++)
{
int from, to, cost;
cin >> from >> to >> cost;
edges[i] = { from - 1, to - 1, cost };
}
nodes[0].val = 0;
nodes[0].isNull = false;
for (int i = 0; i < max(nodes.size() - 1, (vector::size_type)1); i++)
{
for (auto [from, to, cost] : edges)
{
if (!nodes[from].isNull && (nodes[to].isNull || nodes[to].val < nodes[from].val + cost))
{
nodes[to].isNull = false;
nodes[to].val = nodes[from].val + cost;
}
}
}
if (nodes.back().isNull)
{
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78390954/what-is-wrong-in-my-implementation-of-ford-bellman-algorithm[/url]