как найти центр графика (вершина, связанная с любой другой вершиной, но ребра направлены в центр графика) с java. его очень полезное приложение для facebook как сайт.
Предположим, что у вас есть граф с множеством V вершин:
V = { v1, v2, v3, ... , vn }
Теперь рассмотрим крайний случай, когда все вершины связаны с v2 и никаких других ребер не существует, т.е. Множество ребер E, заданных в виде наборов (from, to), есть:
E = ( (v1, v2), (v3, v2), ... , (vn, v2) }
В этом крайнем случае v2, очевидно, является центром графика, определенным вами.
Матрица связности A выглядит следующим образом:
A = {
from
to v1, v2, v3, .. vn
v1 0 0 0 .. 0
v2 1 0 1 .. 1
v3 0 0 0 .. 0
: :
vn 0 0 0 .. 0 }
Здесь v2 четко идентифицируется как центр графа, имея по одному в каждой позиции (за исключением pos v2, т.е. самого себя) своей строки матрицы связности A.
Это позволит идентифицировать центр графика даже, когда в E. есть другие ребра. Обратите внимание, что может быть больше одного центра...
Менее строго определенный центр графа можно найти как вершину с наибольшим количеством записей в своей строке в матрице связности.
Вы можете избежать построения матрицы A, когда у вас есть множество E, и просто рассчитывайте для каждой вершины сколько раз она появляется в позиции корневого кортежа. Вершины с максимальным счетчиком - это точно определенные центры графа, или вершины с числом n - 1 - ваши строго определенные центры.