Избавление от неуникальных записей в списке смежности

В настоящее время я работаю над проектом для моего класса C ++ верхнего уровня, и мы создаем программу, которая создает лабиринт, а затем решает его, создает PNG из указанного лабиринта. Довольно классные вещи. В любом случае, я в курсе, где мне нужно сделать лабиринт.
Моя программа прекрасно работает с лабиринтами, но я должен сделать вывод каждого числа уникальным. Выходные данные просто выдают два знака в 2-мерной матрице, между которыми есть стены, пример вывода для лабиринта 3X4 выглядит следующим образом:

rjeffor1: hydra20 ~ / cs302 / labs / lab5> ./mazemake 3 4 <- 9:49

1 2

1 5

2 1

2 3

3 2

5 1

5 9

6 7

7 6

8 9

9 8

9 5

Однако, моя последняя проблема заключается в том, что мне нужно избавиться от дубликатов стен, например, 1 2 и 2 1. РЕДАКТИРОВАТЬ: и под этим я подразумеваю просто избавиться от 2 1, мне все еще нужна стена и, следовательно, 1 2.

Вот моя функция, в которой я пытаюсь решить проблему:

void aL::make_unique()
{
vector<int>::iterator it, it0;

//need to iterate thru all but last index

for (int i=0; i<(int)adjList.size()-1; i++) {

for (int j=0; j<(int)adjList.size(); j++) {

//find it

if (i!=j) {
it0 = std::find(adjList[i].begin(), adjList[i].end(), j);
it = std::find(adjList[j].begin(), adjList[j].end(), i);
if (it!=adjList[j].end() && it!=adjList[j].end())
//erase it if anything is there
adjList[j].erase(it);
}
}
}
}

Помощь приветствуется, мой мозг на этом этапе

РЕДАКТИРОВАТЬ: вот как я заполняю списки смежности, основанные на указаниях непосредственно слева направо выше и ниже каждого индекса

aL::aL (const int &rows, const int &cols)
{
adjList.resize(rows*cols);
//run thru and figure out where indicies AREN'T
//to fill in their adjacency list
for (int i=0; i<(int)adjList.size(); i++) {
//if not on the left edge
if (i%cols!=0)
adjList[i].push_back(i-1);
//not on the right edge
if ((i+1)%cols!=0)
adjList[i].push_back(i+1);
//not on the top edge
if (i>=cols)
adjList[i].push_back(i-cols);
//not on the bottom edge
if (i<(rows*cols)-cols)
adjList[i].push_back(i+cols);
}
}

0

Решение

Вы можете устранить необходимость постобработки и сделать ее уникальной в конце, если вы отметите, что добавляете в свой список. Не добавляйте «a b», если «b a» уже есть.

0

Другие решения

Других решений пока нет …