Создайте случайную матрицу смежности с каждым узлом, имеющим минимальную степень «k»

Я хочу создать случайную матрицу смежности, в которой каждый узел соединен с «k» другими узлами. Граф, представленный матрицей смежности, неориентирован.

Я начал с 7 узлов в матрице смежности, и каждый узел должен быть связан как минимум с 3 другими узлами. До сих пор я смог получить это:

0 1 1 0 0 0 0 
1 0 1 1 0 0 0 
1 1 0 1 1 0 0 
0 1 1 0 1 1 0 
0 0 1 1 0 1 1 
0 0 0 1 1 0 1 
0 0 0 0 1 1 0

Как видно из матрицы, первая и последняя строки имеют менее трех соединений.

Моя реализация до сих пор:

   for( int i= 0; i<7; i++){
  for( int j= i+1; j<7; j++){
    if (i==j){
        topo[i][j]=0;
     }
    else{    
        for(int k=j; k<i+3 && k<7; k++){
            int connectivity=0;
            while(connectivity<3){
           if (topo[i][k]!=1 && topo[k][i]!=1){
                   topo[i][k]=1;
               topo[k][i]=1;
               connectivity++;
                }
           else{
               connectivity++;
        }
             }
          }
      }
   }
}

Я немного смущен. В вашем названии указано «не менее 7», затем в вопросе указано «ровно 7», а позже в вопросе указано «не менее 3». К какому из них вы стремитесь?

Michiel uit het Broek 08.04.2019 16:42

Подумайте: какой диапазон значений k будет иметь первый раз (с i == 0 и j == 1)?

1201ProgramAlarm 08.04.2019 16:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что мы говорим здесь об ориентированных графах. Предположим, что v — это количество вершин (узлов), а d вершины A (степень, Ваш k) — это количество ребер, которые утоплены из A в другие узлы.

Если приглядеться, то можно обнаружить, что d значение k-th узла — это число 1 в kth строке. Поэтому единственное, что нужно сделать, это нарисовать вектор из 0s и 1s с элементами v-1 (мы не соединяем узел сам с собой) элементов для каждой строки.

Вы можете нарисовать случайный вектор из нулей и единиц, написав в него d единицы и случайным образом переставив его.

Примечание для неориентированного графа. Этот алгоритм можно применить к верхнему правому матричному треугольнику, динамически переписывая известные значения в нижний левый. Затем для каждой строки сверху вниз можно применить алгоритм, рисующий остаток строки.

Другие вопросы по теме