1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
||||||
1 | ||||||
Подобие графа05.06.2016, 18:53. Показов 1191. Ответов 29
Метки нет (Все метки)
Имеется примерно такой вот класс:
Добавлено через 5 часов 24 минуты UPD: Необязательно себя утруждать и писать код, приму любую помощь. Достаточно просто объяснить, как это возможно реализовать, либо не возможно и свой вариант решения задачи.
0
|
05.06.2016, 18:53 | |
Ответы с готовыми решениями:
29
По заданной матрице смежности простого графа построить каркас этого графа с использованием поиска в ширину Обход графа в ширину для определения всех вершин графа, находящихся на фиксированном расстоянии от данной вершины Подобие игры Подобие треугольников |
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
05.06.2016, 19:00 | 2 |
Я думал как раз код написать .
Идея в том, чтобы делать связи в файле по индексам или по ключам.
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
05.06.2016, 19:01 [ТС] | 3 |
UPD2:
То что уже имеется: -все возможные объекты room вводятся из файлов Из идей было такое: -названия этих файлов (с набором данных для room, описано выше) будут расположены иерархически в файле - карте и в зависимости от степени вложенности - присваивать каждому названию индекс. -В соответствии индексу и протягивать связи между объектами, создавая тем самым граф. Но с реализацией в тупике.
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
05.06.2016, 19:08 | 4 |
Зачем объектам комнат иерархичность?
Можно, к примеру, иметь четыре записи/файла: 0: Первая комната, связи: 1, 2 1: Вторая комната, связи: 0, 3 2: Третья комната, связи: 0, 3 3: Четвёртая комната, связи: 1, 2 Затем по этим данным при загрузке восстанавливать массив указателей. Добавлено через 1 минуту Или вопрос в том, как по таким данным восстановить объекты?
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
05.06.2016, 19:14 [ТС] | 5 |
Vort_, о таком варианте структуры файла - карты и не подумал, хотел как-то сделать что-бы и наглядно было ясно что-куда и что-бы это потом можно было индексировать от степени вложенности. Но теперь от этой идеи откажусь.
Но это даже наверное не главная проблема, не хватает информации и знаний о том, как потом имея индексы воссоздать граф такого типа, не много информации по этому поводу нашёл. Если вас не затруднит, я бы был рад если вы покажите как.
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
||||||
05.06.2016, 19:31 | 6 | |||||
Сообщение было отмечено vadim_bz как решение
Решение
Вот пример:
Файл: Код
4 First room First room description 2 1 2 Second room Second room description 2 0 3 Third room Third room description 2 0 3 Fourth room Fourth room description 2 1 2
1
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
06.06.2016, 13:12 | 7 |
Ну, комнаты у вас и так связаны и образуют граф через указатели. А вы в каком виде граф хотите получить?
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
06.06.2016, 13:19 [ТС] | 8 |
Mr.X, именно так и хотел, не был уверен в номенклатуре, так как при поисках находил нечто иное, отличное от желаемого.
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
07.06.2016, 18:19 [ТС] | 9 |
Уж коль далеко не ходить, как устроить для него очищение выделенной памяти?) Думаю обращаться в деструкторе к тому же файлу - карте не совсем правильно, может сделать так что бы при вызове деструктора любой комнаты очищался бы весь граф сразу, или тоже вариант не очень?
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
07.06.2016, 18:22 | 10 |
Если использовать мой вариант - vector<Room>, то он сам очистится как выйдет из области видимости.
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
07.06.2016, 19:08 [ТС] | 11 |
Vort_, ах да, забыл сказать, сделал всё с выделением памяти и после создания всё это живёт не умирая. Вот и подумываю, как лучше организовать очищение (деструктор).
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
07.06.2016, 19:13 | 12 |
За один элемент всё держится что ли?
Если так, то можно создать временный массив, закинуть в него указатели на все элементы. Затем пройтись по массиву и очистить у каждого объекта ссылки на соседние комнаты (не удаляя объекты). После чего в цикле удалить все объекты в массиве. Но точно сказать, не понимая структуры решения, я не могу.
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.06.2016, 19:34 | 13 |
Используйте shared_ptr.
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
07.06.2016, 19:35 | 14 |
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.06.2016, 19:38 | 15 |
Да, упустил из вида. Тогда weak_ptr.
1
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
07.06.2016, 20:29 [ТС] | 16 |
Vort_ , у меня так и выходит, что каждые соседние комнаты имеют указатели на друг друга. Я думал сделать так, что бы при вызове деструктора для произвольной комнаты начинался поиск крайней комнаты графа (которая имеет только одну ссылку на соседнюю), очистить её, вернуться обратно и снова начать поиск крайней, пока комнат не останется.
Но это и правда ломается если комнат всего 1 или где то не протянута обратная связь.
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
|
07.06.2016, 20:34 [ТС] | 17 |
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
07.06.2016, 21:52 | 18 |
0
|
199 / 199 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
08.06.2016, 06:30 | 19 |
мне кажется, что как загрузкой, так и удалением графа должна заниматься внешняя, по отношению к элементу, сущность
задача же деструктора элемента - уничтожить именно элемент
0
|
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
|
||||||
08.06.2016, 17:55 [ТС] | 20 | |||||
Не правильно?
0
|
08.06.2016, 17:55 | |
08.06.2016, 17:55 | |
Помогаю со студенческими работами здесь
20
Подобие чата с ботом Подобие базы данных Подобие math.h для геометрии Робот (подобие игры Sokoban) Как сделать подобие case из Pascal в C++ Выравнивание данных в структуре. Подобие alignas() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |