@artshelom

Как уравнять графы?

У меня есть неориентированный цикличный граф. У которого мне известно только разница между высотами ребер, но получается, что в сумме не равно 0.

Есть ли готовые библиотеки для уравнивания на c# или как написать алгоритм если в одном графе циклов много?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Я так понял, что ребра задают разницу между "высотами" вершин. "получается, что в сумме не равно 0" означает, что конфликтов нет и можно назначить вершинам какие-то высоты, чтобы все ребра были правильными. Я правильно понял условие?

Тогда задача решается простым обходом в глубину или в ширину, как вам угодно. Просто зафиксируйте одну вершину на высоте 0, и проходя по всем ребрам фиксируйте высоты всех остальных вершин. Если ребро ведет уже к зафиксированной вершине, то можно проверить, что высота остается такой же, но в эту вершину, в любом случае, обход больше не заходит.

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

Обход надо вызывать в цикле, чтобы обошелся весь граф, даже если он несвязный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sgjurano
@sgjurano
Разработчик
А для чего вам сводить сумму рёбер графа к нулю? И что такое "высота ребра"?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы