Доступ к матрице из связанного двудольного обхода - PullRequest
0 голосов
/ 12 марта 2020

Добрый вечер,

Мне нужно немного помочь увидеть что-то насквозь. Вот ситуация:

У меня есть матрица элементов, например:

enter image description here

Где каждая запись может рассматриваться как узел (узлы не имеют связанных идентификаторов, я просто обозначил их для простоты объяснения). Затем к элементу «6» можно получить доступ как матрицу [1] [2] и т. Д. c.

Теперь я преобразую это в следующую структуру двудольного графа:

enter image description here

Теперь, добавляя ребро слева направо, я получаю следующее вложенное l oop:

for (int i = 1; i <= 8; i++) {
    for (int j = 1; j <= 8; j++) {
        capacityGraph[i][j + 8] = 1; //First layer to second layer
    }
}

Теперь мой вопрос:

Есть ли способ доступа к матричному элементу из двудольного обхода (не обязательно должен быть в том же l oop)? Я думаю, что решение должно быть простым, я просто не могу продумать его полностью. Но, например, если я = 6, то я знаю, что смотрю на 10-й узел. Как мне перевести это в матрицу [2] [2]? И также для j-й индексации.

Я посмотрел несколько ссылок, и я действительно думаю, что ответ здесь:

Как сопоставить индексы матрицы с 1 массив (C ++)?

, но я не могу полностью соединить точки по какой-либо причине. Любая помощь с благодарностью! Спасибо.

1 Ответ

0 голосов
/ 13 марта 2020

Хорошо, я думаю, что я понял это на самом деле.

Я знаю, что левая сторона состоит из всех четных узлов, а правая сторона состоит из всех нечетных узлов. Тогда я могу получить значение связанного узла либо 2 (i-1), либо 2 (j-1) + 1 для левой и правой стороны соответственно.

Теперь, учитывая значение / положение узла, K, Я думаю, что я могу преобразовать это в координаты XY так, чтобы столбец был K% n для (матрица nxn). И строка - это floor (K / n).

Затем матрица обращается к матрице [K / n] [K% n]. В этом примере это работает, но я обновлю, если пойму что-нибудь новое.

...