2013-03-02 4 views
0

Я хотел бы сгенерировать матрицу смежности неориентированного графа с N узлами. В частности, этот граф должен иметь фиксированную степень (каждый узел подключен к фиксированному числу узла d).matlab генерировать фиксированный градус неориентированный граф

Если множество D = N-1, то решение тривиально:

A = ones(N) - eye(N); 

Как можно обобщить для любого г?

ADD:

Вот решение (спасибо Оли Charlesworth):

function A = fixedDegreeGraph(N, d) 

A = zeros(N); 

for i=1:N 

    b = i; 
    f = i; 

    for k=1:floor(d/2) 

     f = f + 1; 
     if (f == N + 1) 
      f = 1; 
     end 
     A(i, f) = 1; 
     A(f, i) = 1; 

     b = b - 1; 
     if (b == 0) 
      b = N; 
     end 
     A(i, b) = 1; 
     A(b, i) = 1; 

    end 


end 

ответ

1

Ибо даже d, вот способ визуализировать подход.

  • Нарисуйте вершины, расположенные по кругу.
  • Каждая вершина соединена со своими ближайшими соседними соседями (d/2), а также с ближайшими соседними соседями (d/2).

Это должно быть довольно очевидно, как превратить это в матрицу смежности (подсказка: это будет circulant matrix, так что вы можете найти функцию toeplitz полезно).

Расширение этого нечетным d не намного сложнее ... (хотя примечание there is no solution if both N and d are odd)

+0

Благодарим Вас за отзыв! Я написал решение без использования toeplitz (см. Мой оригинальный пост). Как я могу использовать toeplitz? –

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