В настоящее время я пишу программу, которая занимается манипуляцией графиками. Для простоты метка каждой вершины является положительным целым числом (т.е. 1, 2, ...). Для одного из алгоритмов, которые я пытаюсь реализовать, мне нужно написать функцию edgeId(u, v)
, которая принимает два вершинных номера u
и v
и отображает ребро (u, v) на уникальное положительное целое число.Запись функции для привязки ребер к целым положительным числам
Поскольку мой алгоритм должен обрабатывать направленные и неориентированные графики, у меня есть следующие положения. Для ориентированных графов edgeId(u, v)
должен быть инъективным (то есть edgeId(a, b)
= edgeId(c, d)
тогда и только тогда, когда a
= c
и b
= d
). Для неориентированных графов он должен быть симметричным (т. Е. edgeId(u, v)
= edgeId(v, u)
, но только эти два могут отображать это положительное целое число).
У кого-нибудь есть идея о том, как реализовать такую функцию? Каждая идея, которая у меня была до сих пор, потерпела неудачу, потому что я не знаю количества вершин на графике.
Любая помощь была бы принята с благодарностью!
Держите словарь узлов и номер, назначенный на границу между ними? –
Разве это не было бы неэффективно для очень большого числа вершин? – Ryan
Число постоянных узлов? Или это эволюционирующий граф? – amit