В настоящее время я работаю над проектом для моего класса 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);
}
}
Вы можете устранить необходимость постобработки и сделать ее уникальной в конце, если вы отметите, что добавляете в свой список. Не добавляйте «a b», если «b a» уже есть.
Других решений пока нет …