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

учитывая график, скажем

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

g

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

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

3 ответов


вот подход с использованием 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


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

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

enter image description here


вот что я пробовал

HighlightGraph[g, 
 Part[VertexList@g, 
  Flatten@Position[VertexDegree@g, Max[VertexDegree@g]]]]

hg

С Pick

HighlightGraph[g, Pick[VertexList@g, VertexDegree@g, Max[VertexDegree@g]]]