разобрать двумерную матрицу в список ссылок

Вот матрица, которую я хочу представить в виде списка ссылок alt text

Идея состоит в том, что это двумерная матрица. Красный шрифт — это обычный [i][j], а синий — дополнительная информация, которую я хочу сохранить в списке ссылок.

В этой матрице мне нужно хранить несколько данных.

  1. внутренний ряд
  2. инт колм
  3. метка int [как показано синим цветом]
  4. логическое значение (значение, которое будет отображаться на экране)
  5. *** Правильно
  6. *** оставил
  7. *** up
  8. *** вниз

проблема в том, что я получу 4 списка ссылок, если создам 4 указателя массива [для двумерной матрицы]? как мне вообще получить указатели направления???

Если вам интересно, я работаю над решением карты Карно. текст ссылки

Любая помощь приветствуется. Спасибо!


person CppLearner    schedule 05.12.2010    source источник
comment
... и почему вы хотите сохранить это в связанном списке? Каким должен быть порядок элементов? Структура с 4 указателями (вправо/влево/вверх/вниз) в каждом узле в любом случае не является связанным списком; это график)   -  person Karl Knechtel    schedule 05.12.2010
comment
Я не понимаю, почему вы не можете просто работать с индексами, не беспокоясь о связанных списках. Тогда, если каждый элемент имеет 4 указателя, это больше не список. И если они двунаправленные, это своего рода неориентированный граф. Просто используйте двумерный массив structs и живите спокойно!   -  person Jack    schedule 05.12.2010
comment
Почему связанные списки? Двумерный массив был бы намного проще для этой задачи.   -  person Fred Foo    schedule 05.12.2010
comment
да ты прав. Я изначально имел в виду неориентированный граф. Я подумал о LL из-за всей дополнительной информации. Правильно. одна проблема: прил. матрица графика n*n, то есть мне нужно 16*16. не так уж и много для современного ПК. и со списком adj, я не знаю, насколько это полезно по сравнению с adj. матрица.   -  person CppLearner    schedule 05.12.2010
comment
вам даже не нужна матрица смежности. Просто двумерный массив, в котором вы заботитесь о циклических соображениях, необходимых для карты Карно (будет работать только мод над индексами)   -  person Jack    schedule 05.12.2010
comment
Спасибо, парни. хм, Джек, я не уверен, как работает% в этом случае? у тебя есть идеи? когда я все равно использую индексный мод?   -  person CppLearner    schedule 05.12.2010


Ответы (1)


Не используйте связанный список, используйте двумерный массив. Быстрый и грязный (и неполный):

struct Matrix {
    struct Entry {
        int label;
        bool value;
    };

    Entry *array;
    size_t rowlen;

    Matrix(int n) : rowlen(n) { array = new Entry[n*n]; }
    ~Matrix() { delete[] array; }

    Entry &at(int i, int j) { return array[i * rowlen + j]; }

    // etc.
};

Нет необходимости в указателях направления, просто используйте умную логику сложения и вычитания.

person Fred Foo    schedule 05.12.2010
comment
спасибо Ларсманс. я посмотрю, что я могу узнать из вашего демонстрационного кода. Благодарность! - person CppLearner; 05.12.2010