Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35

Подобие графа

05.06.2016, 18:53. Показов 1944. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется примерно такой вот класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Room {
    private:
        string name;
        string story;
        vector <Room*> rooms; //указатели, куда доступен переход
    public:
        Room () {}
        Room (string name, string story) {
            this->name = name;
            this->story = story;
            }
    public:
        string getName () const { return name; }
        string getStory () const { return story; }
    };
Нужно создать некое подобие графа, элементом которого был бы класс расположенный выше. Переменная rooms содержала бы указатели на все доступные соседние элементы. И вот всё голову ломаю и придумать не могу, как это всё грамотно организовать. А именно, в каком формате будет ввод (но обязательно из файла) и как это всё дело потом создать и связать опираясь на ввод. Буду рад любым пинкам в правильном направлении.

Добавлено через 5 часов 24 минуты
UPD:
Необязательно себя утруждать и писать код, приму любую помощь. Достаточно просто объяснить, как это возможно реализовать, либо не возможно и свой вариант решения задачи.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2016, 18:53
Ответы с готовыми решениями:

По заданной матрице смежности простого графа построить каркас этого графа с использованием поиска в ширину
Задание: заданно матрицу смежности простого графа. Построить каркас этого графа с использованием поиска вширь. Помогите написать...

Обход графа в ширину для определения всех вершин графа, находящихся на фиксированном расстоянии от данной вершины
Реализуйте обход графа в ширину для определения всех вершин графа, находящихся на фиксированном расстоянии d от данной вершины. HELP

Подобие игры
Ребята. Начал писать, но тут проблема. Программа не работает. Он запускает лишь ранее скомпилированный код (который &quot;загружает&quot;...

29
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
08.06.2016, 18:09
Студворк — интернет-сервис помощи студентам
vadim_bz, после выхода из функции ptr уничтожит объект, и weak_ptr в векторе будет невалидным.

Добавлено через 1 минуту
Что бы использовать weak_ptr, для каждой комнаты нужен shared_ptr, который, к примеру, будет хранится во внешнем контейнере, вроде вектора.
0
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
08.06.2016, 18:59  [ТС]
Мда, выходит тогда что-то сложное и не очень красивое, уж проще тогда где то держать вектор с указателями на все элементы, уж лучше такой баласт, чем все эти заморочки с "умными указателями", где в конечном счёте так же придётся держать вектор, но только с shared_ptr.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
08.06.2016, 19:02
vadim_bz, в случае shared_ptr и weak_ptr мы точно можем знать, когда объект уничтожен и weak_ptr не валидный. Ну и избежим new/delete.
0
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
08.06.2016, 19:58  [ТС]
Toshkarik, я хотел то как, функция строящая граф возвращает обычный указатель на первый элемент графа (созданный первым), затем навигация осуществляется путём перебора в цикле ближайших соседей, по какому-нибудь условию, и если условие выполняется то этот указатель приравнивается новому элементу графа. А теперь получается с shared_ptr такое не провернуть да и весь массив нужно выводить. Либо сделать что бы первый элемент массива был навигационный (то что описал ранее), другими словами - текущее положение в графе, а остальные уже элементы массива - это элементы графа и тогда один этот массив выводить из функции создания графа.
0
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
08.06.2016, 20:04
Я не понимаю что мешает держать и массив и указатель на какой-то элемент.
Массив будет использоваться при создании и уничтожении графа, а указатель - для навигации по нему.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
08.06.2016, 20:23
Ну, я вижу это примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Room {
public:
   Room( const std::string &roomName, const std::string &roomStory )
   :  name( roomName ),
      story( roomStory )
   {
 
   }
 
   ~Room() {
 
   }
 
   const std::string &getName() const {
      return name;
   }
 
   const std::string &getStory() const {
      return story;
   }
   //если нужно, реализовываем set-функции
 
   void link( std::shared_ptr< Room > room ) {
      links.push_back( room );
   }
 
private:
   std::string name;
   std::string story;
 
   std::vector< std::weak_ptr< Room > > links;
};
 
int main() {
   std::vector< std::shared_ptr< Room >> rooms;
 
   //тут считываем все комнаты в вектор ( исключая связи )
 
   for ( auto &it : rooms ) {
      //тут заполняем связи с помощью функции link
   }
 
   return 0;
}
При этом связи могут хранится в файле после описания всех комнат. Причем, как можно заметить, они двусторонние, поэтому можно просто указывать пары:

Code
1
2
3
4
5
6
7
имяКомнаты1 описаниеКомнаты1
имяКомнаты2 описаниеКомнаты2
имяКомнаты3 описаниеКомнаты3
имяКомнаты4 описаниеКомнаты4
1 2 //первая и вторая связаны
1 3 //первая и третья связаны
2 4 //вторая и четвертая связаны
1
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
08.06.2016, 20:24  [ТС]
Vort_, да наверное так и сделаю, а мой вариант с навигационным указателем, как первым элементом массива неадекватен?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
08.06.2016, 20:28
Последний цикл неверно записал, там нужно считывать до конца файла, но идею я думаю Вы должны понять.
0
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
08.06.2016, 20:32
Цитата Сообщение от vadim_bz Посмотреть сообщение
Vort_, да наверное так и сделаю, а мой вариант с навигационным указателем, как первым элементом массива неадекватен?
Если не запутаться и не удалить потом элемент дважды, то можно.
Но я бы разнёс.
Сделал бы, к примеру, класс Graph, туда положил массив и указатель на текущий элемент.
А также методы по заполнению и очистке массива.
1
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
08.06.2016, 20:47  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
Последний цикл неверно записал, там нужно считывать до конца файла, но идею я думаю Вы должны понять.
Да примерно такой и вышел второй вариант, спасибо))

Думаю вопрос теперь точно исчерпан, всем ещё раз большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2016, 20:47

Подобие треугольников
На проверочном сайте проходит 80%, где ошибка? Заданы два треугольника: ABC и DEF. Необходимо определить, являются ли они подобными. ...

Подобие чата с ботом
А как сделать что то на подобе чата с ботом Тоесть что-бы если я написал в консоль слово которое я укажу в коде например asd то будет...

Подобие базы данных
А если быть точнее, то цель стоит- вывести перед пользователем список, из которого он нажатием клавиши 1 2 или 3 4 5выберет интересующий...

Подобие math.h для геометрии
Существуют ли такие библиотеки? И где их взять.. Например, нужно найти расстояние от точки до прямой заданной двумя точками в 3д. А нет...

Робот (подобие игры Sokoban)
Написать программу, на подобие игры Sokoban 1) создаёте матрицу нужного размера 2) из входного файла считываете заполнение поля 3)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru