Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизЧтение/запись графа из файла Найти похожие ветки
← →
aka © (2015-12-16 18:56) [0]Есть граф, узлы будут примерно такие:
PNode = ^TNode;
TNode = record
X: Integer;
Y: Integer;
Visit: Boolean;
NType: Integer;
Name: String[200];
Child: array of PNode;
end;
У меня вариант кроме как ввести дополнительный массив нет, т.е примерно так:
завести дополнительный массивNodeList: array of PNode
, а в записи заменитьChild: array of PNode;
наChild: array of Integer;
и хранить в Child не ссылки а индексы массива NodeList.
← →
Rouse_ © (2015-12-16 19:02) [1]Вопрос то какой?
← →
aka © (2015-12-16 19:05) [2]
> Вопрос то какой?
Другие варианты кроме моего
← →
Rouse_ © (2015-12-16 19:05) [3]Сериализация?
← →
Rouse_ © (2015-12-16 19:06) [4]Вот тебе для примера, как раз с графами баловался "тыща лет тому назад" © :)
http://rouse.drkb.ru/other.php#cobweb
← →
Юрий Зотов © (2015-12-16 19:09) [5]> и хранить в Child не ссылки а индексы массива NodeList
А где тогда хранить сам этот массив?
Я бы ничего менять не стал. Кроме одного - возможно, имя Child не очень подходящее (зависит от типа графа).
← →
aka © (2015-12-16 19:20) [6]
> А где тогда хранить сам этот массив?
>
> Я бы ничего менять не стал. Кроме одного - возможно, имя
> Child не очень подходящее (зависит от типа графа).
Его хранить и не нужно. он нужен только для того чтобы восстановить ссылочную структуру графа после чтения из файла.
← →
KSergey © (2015-12-18 12:21) [7]Всё равно не понятно в чем именно у вас возникает проблема?
Хотя кажется я вас понял.
Фактически у вас проблема "как сохранить адреса и восстановить их после чтения".
В такой постановке задача в общем случае не решаема, конечно (формально может и решаема извращениями, но зачем нам это). Фактически вам нужны неизменные значения в ссылках на Child до и после чтения, и вы сами к этому пришли, заменив хранение ссылки PNode (в котором возникает не управляемое вами значение) на integer, куда вы уже можете писать нужные вам значения.
Однако, если вспомнить, что PNode - это указатель, а указатель это в общем-то целое число, то можно сделать такую реализацию:
1. При сохранении в файл сохранять прям как есть, указатели писать в виде целых чисел.
2. При чтении делать так:
а) завели временный список соответствия значений PNode, прочитанных из файла, и реальных PNode, которые получились в данном сеансе работы, т.е. просто динамический массив
PNodeMapping: array of record
PNodeFromFile: PNode;
PNodeReal: PNode;
end;
массив этот существует только на момент чтения из файла;
б) блин, чета я уже устал писать далее.
В общем смысл в том, что когда мы создаем экземпляр реального Child-обекта динамически, то помещаем это значение в PNodeReal
В итоге у нас образуется соответствие PNodeFromFile <--> PNodeReal, и надо будет просто на основании этого соответствия заменить значения PNodeFromFile (это можно сказать номера на предыдущем сеансе работы) на наши новые PNodeReal, которые соответствуют указателям в нашем текущем сеансе работы.
И вся эта структура станет валидной для текущего состояния.
← →
Плохиш © (2015-12-18 16:13) [8]
> aka © (16.12.15 19:05) [2]
>
>
> > Вопрос то какой?
>
> Другие варианты кроме моего
Класс умеющий себя сохранять в поток и востанавливать из него же.
PS. По-моему, дедушка Лени... Вирт описывал алгоритм в своём "описании языка паскаль"ю
← →
MsGuns © (2015-12-18 19:26) [9]С графами работал достаточно много, в подавляющем большинстве случаев исчерпывающим инструментом был TTreeView, у которого, как известно, есть методы SaveToFile и LoadFromFile.
Чем не решение ?
← →
aka © (2015-12-19 15:01) [10]
> Чем не решение ?
такой граф называется деревом
← →
MsGuns © (2015-12-19 23:26) [11]Я в курсе, но что мешает в дерево запихать граф. Я в свое время прекрасно это делал :)
← →
TohaNik © (2015-12-20 14:04) [12]
> MsGuns © (19.12.15 23:26) [11]
>
> Я в курсе, но что мешает в дерево запихать граф. Я в свое
> время прекрасно это делал :)
>
Граф
Наверное это был не TTreeView, а... .
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.061 c