Это полностью зависит от случая. В приведенном вами примере хорошее решение может заключаться в использовании нулей , поскольку ребра взвешены, и для многих целей ребро с нулевым весом эквивалентно отсутствию ребра. Это правда, если вы делаете такие вещи, как алгоритмы потока / вырезания.
Как правило, при выборе между NaN и Inf я бы выбрал NaN . У Inf есть некоторые свойства, которые вы, возможно, не хотели бы использовать как недействительный маркер:
Inf*(-1) = -Inf
Inf+(-Inf) = NaN
Inf > 10 = True
etc...
Чистым решением может быть другая матрица с логическими значениями , которая имеет True, где соединение является действительным, и False в противном случае. Это тратит немного памяти, но если ваша матрица не огромна, я думаю, что читабельность кода, которую она вам даст, того стоит.