2012-01-16 2 views
6

Учитывая график, скажетКак найти все вершины в графе с максимальной степенью?

g = Graph[{x -> a, y -> c, a -> b, 
      b -> c, a -> c, d -> c, 
      a -> d, b -> d}, 
     VertexLabels -> "Name"] 

g

Как найти все вершины в графе с максимальной степенью, т.е. списка всех вершин, имеет наибольшее число ребер, и выделить их в график?

В этом случае это были бы вершины {a,c}.

ответ

5

Вот подход, использующий DegreeCentrality:

(* In[41]:= *) max = Pick[VertexList[g], DegreeCentrality[g], Max[DegreeCentrality[g]]] 

(* Out[41]= *) {a, c} 

(* In[42]:= *) HighlightGraph[g, max] 

enter image description here

+0

Я думаю, что 'DegreeCentrality' ведет себя аналогично' VertexDegree'? +1 для 'Pick', который сохраняет несколько строк и более аккуратно [чем мой подход] –

3

Вот что я пытался

HighlightGraph[g, 
Part[[email protected], 
    [email protected][[email protected], Max[[email protected]]]]] 

hg

же с помощью Pick

HighlightGraph[g, Pick[[email protected], [email protected], Max[[email protected]]]] 
+0

Ваше решение выглядит точно так же, как то, что я придумал: 'HighlightGraph [г, VertexList [г] [[Flatten [Позиция [vd, Max [vd = VertexDegree [g]]], 1]]]] 'Вы можете выделить' VertexInDegree' или 'VertexOutDegree', используя соответствующие предикаты вместо' VertexDegree'. – DavidC

+0

Похоже на меня. – kkm

5

Вы можете вообще выделить вершины от их степени:

HighlightGraph[g, 
Table[Style[VertexList[g][[i]], 
    ColorData["TemperatureMap"][ 
    VertexDegree[g][[i]]/Max[VertexDegree[g]]]], {i, VertexCount[g]}]] 

enter image description here

+0

Добро пожаловать в StackOverflow! Я посмотрел ваш блог и канал vimeo, это очень интересно. :-) Новый веб-сайт Mathematica в том же формате, что и SO, запустится через пару дней. Вы можете [сделать это здесь] (http://area51.stackexchange.com/proposals/37304/mathematica?referrer=23yK9sXkBPQIDM_9uBjtlA2) здесь, чтобы получить ранний доступ. – Szabolcs

+0

Спасибо, Szabolcs! Я уже совершил ;-) –

Смежные вопросы