Главная страница
    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.061 c
2-1421304666
chron22
2015-01-15 09:51
2017.01.15
динамический sql в компонентах


2-1424793636
TYMON
2015-02-24 19:00
2017.01.15
Intraweb Подключение к базе через ADO


2-1425269230
Nickolay
2015-03-02 07:07
2017.01.15
Отображение содержимого папок


15-1455399002
Юрий
2016-02-14 00:30
2017.01.15
С днем рождения ! 14 февраля 2016 воскресенье


15-1435899159
Any
2015-07-03 07:52
2017.01.15
Где найти фрилансеров





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский