Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Чтение/запись графа из файла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
15-1457422493
Pavia
2016-03-08 10:34
2017.01.15
C 8 марта!


6-1281946428
PonosetcDM
2010-08-16 12:13
2017.01.15
Indy в Internet


15-1452147343
pavelnk
2016-01-07 09:15
2017.01.15
Вирусная программа в браузере


15-1457295903
Юрий Зотов
2016-03-06 23:25
2017.01.15
Веселые картинки


2-1423485605
lewka
2015-02-09 15:40
2017.01.15
Запрос в MS Access