Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
1

Как организовать хранение увеличивающихся данных - список списков?

12.02.2017, 19:02. Показов 683. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу написать программу, решающую пятнашки. В сети нашёл исходники аж 2 шт, оба работают неудовлетворительно, а именно - виснут при некоторых корректных исходных данных. Хочу сделать сам.

Имеется исходное поле, например
1 2 3 4
5 10 6 8
9 11 7 12
13 15 14 0

Данные хранятся в структуре вида:

C++ (Qt)
1
2
3
4
5
6
    struct data
    {
        quint8 pole[4][4];
        int dificalt;
        int lastmove;
    };
Вначале можно сделать 2 хода: 12 и 14 (функцию, получающую возможные ходы написал) - т.е. из исходной структуры получим две, и для хранения нужно уже 2 списка вида: data0, data1 и data0, data2. Затем из data1 и data2 можно из каждого сделать по 2 хода:

data0, data1, data3
data0, data1, data4
data0, data2, data5
data0, data2, data6

и так далее, количество списков (и количество структур в них) будет быстро увеличиваться, но мне нужно первые 5-6-7 ходов. Вопрос - как объявлять новые структуры и как объявлять новые списки структур? Как заставить всё это работать?

Затем, когда списков будет много, для каждой позиции можно будет вычислить "рейтинг", ветки с плохим рейтингом удалить, а оставшиеся продолжить - т.е. должна быть возможность удаления целых веток списков.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2017, 19:02
Ответы с готовыми решениями:

Как организовать хранение паролей от mysql?
дело в том что не как не могу сообразить организовать программу. то есть при первом запуске...

Как организовать хранение ключей QSettings?
Всем привет! QSettings стал использоваться у меня во многих местах в программе и надоело каждый раз...

Как лучше организовать хранение данных?
Всем доброго времени суток. Есть необходимость хранения в базе 500 чисел. Числа поступают в...

Как правильно организовать хранение данных?
Добрый день! Прошу совета. Есть база Mysql. Есть класс типа Машина В него входит несколько...

3
66 / 66 / 18
Регистрация: 31.03.2015
Сообщений: 253
13.02.2017, 10:31 2
Попробуйте сделать QStack<data*>. На каждом шагу брать верхний елемент, проверять на тупик, создавать (если рейтинг хороший) 2-4 новых data в зависимости от положения, пихать их обратно в стек и делать следующий шаг.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
13.02.2017, 11:26 3
alexu_007, Я бы использовал QHash. А в качестве ключа можно взять pole. Причем его величину можно сократить до 8 байт (16 четырехбитовых цифр)
И для 7 ходов нужно не так уж много памяти. Верхняя граница 47 = 16000. Даже меньше, поскольку "обратные" ходы смысла не имеют, 37 = 2187
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
13.02.2017, 11:45 4
alexu_007, На мой взгляд для подобной темы лучше применять обычное дерево.
0
13.02.2017, 11:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2017, 11:45
Помогаю со студенческими работами здесь

Экзаменатор Правил Дорожного Движения. Как организовать хранение данных?
У меня тема курсовой работы: Экзаменатор Правил Дорожнего Движения. Мне нужно хранить всю...

Копирование данных двумерного массива состоящего из списков в список списков.
Для нахождения МСТ (минимального остового дерева) написал функцию, которая принимает масив - гарф....

«Хранение и обработка данных с использованием линейных списков».
Вот мне к курсовой работе дали задание.Я не могу его понять, что от меня требуется. Что за система...

Хранение и обработка данных с использованием линейных списков
Люди, помогите пожалуйста!!! Дали задание к курсовой работе. Сделать надо любое из двух (какое...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru