Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.05 c
15-1451943001
Юрий
2016-01-05 00:30
2017.01.15
С днем рождения ! 5 января 2016 вторник


6-1256640553
Encore
2009-10-27 13:49
2017.01.15
Post/get неверная кодировка


15-1450560602
Юрий
2015-12-20 00:30
2017.01.15
С днем рождения ! 20 декабря 2015 воскресенье


2-1427929641
Drowsy
2015-04-02 02:07
2017.01.15
Как определить, установлены ли обновления RTL2, RTL3 на Дельфи 6?


15-1454425447
Дмитрий Белькевич
2016-02-02 18:04
2017.01.15
Не работает доступ к WebDAV диску из-под сервиса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский