![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Maximus |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задача:
Нужно создать двудольный граф (то есть задаются начальные вершины и записываются пока без дуг в один граф, потом каким-то образом нужно разделить его с произвольными кол-вами вершин на две доли и соединить дугами каждую вершину одной доли с каждой вершиной другой доли, причем смежные вершины между собой не соединяются дугами). Вот динамическая структура, которая должна использоваться: Код type refnode=^node; refarc=^arc; node=record id: integer; // номер(идентификатор) вершины infnode: integer; //вес вершины, не обязательно! next: refnode; //ссылка на след. вершину arclist: refarc //ссылка на дуги end; arc=record infarc: integer; //вес дуги, это тоже не обязательно юзать! next: refarc; //ссылка на след. дугу adj: refnode //ссылка не след. вершину end; Помогите! Напишите процедуру разделения графа на две доли(как бы на два подграфа) и поцедуру соединения вершин долей! Сообщение отредактировано: volvo - 22.01.2005 16:51 -------------------- The Truth Is Out There...
|
Maximus |
![]()
Сообщение
#2
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
могу дать все необходимые процедуры вставки Вершины в граф, добавления Дуги(связывающей две вершины) в граф...
-------------------- The Truth Is Out There...
|
BlackShadow |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата смежные вершины между собой не соединяются дугами Вот это очень непонятный момент. Цитата могу дать все необходимые процедуры вставки Вершины в граф, добавления Дуги(связывающей две вершины) в граф... Давай. |
gMan |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 69 Пол: Мужской Реальное имя: Вася Пупкин Репутация: ![]() ![]() ![]() |
BlackShadow,Maximus а что вообще такое "двудольный граф"?
-------------------- Стабильность - признак мастерства
|
BlackShadow |
![]()
Сообщение
#5
|
Гость ![]() |
Читай выше. И внимательнее.
|
Maximus |
![]()
Сообщение
#6
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Поясняю из теории "Дискретной математики":
Двудольный граф - это граф, множество вершин которого можно разбить на две части(доли) так, что вершины из одной доли не смежно между собой. Не смежны - то есть не соединены дугой! Смежность - соединённость! Вот! То бишь к примеру: 4 вершины в левой доли, 3 в правой 1,2,3,4 - между собой не соединяются 5,6,7 - между собой не соединяются 1* *5 2* *6 3* *7 4* Результат должен быть такой: 1 вершина соединяется с : 5,6,7 2 вершина соединяется с : 5,6,7 3 вершина соединяется с : 5,6,7 4 вершина соединяется с : 5,6,7 5 вершина соединяется с : 1,2,3,4 6 вершина соединяется с : 1,2,3,4 7 вершина соединяется с : 1,2,3,4 Короче нужно грузить примерно из такого текстового файла ВЕС вершин из каждой доли: к примеру input.txt: --------------------------------------------- | 5 10 8 - 1 доля | 3 12 9 18 - 2 доля | | | 1) Либо создать два графа (как бы доли) и вставить вершины из 1 строки и 2ой 2) Либо есть просто файл, где перечислены весы каждой вершины в одну строку. И нужно создать один граф и вставить вершины, а потом как-то разбить на два графа, ну и затем связать вершины двух разных графов. Коды процедур ниже: {Graph} - заголовки для процедур. Код procedure Add_Node_To_Graph(var graph: refnode; n,x: integer); procedure Add_Arc_To_Graph(p1,p2: refnode); function Find_Node_In_Graph(graph: refnode; x: integer): refnode; function Find_Arcs_In_Graph(graph: refnode; x: integer): alist; procedure Delete_Node_In_Graph(var graph: refnode; var p: refnode); procedure Delete_Arc_In_Graph(u,v: refnode); procedure Destroy_Graph(graph: refnode); procedure Browse_D_Graph(graph: refnode); Procedure Browse_Graph2(graph:refnode); procedure Print_Graph(var graph: refnode; l,k,y:integer);[/b] Вот пока 3 процедуры, если что-то еще нужно из верхнего списка, запостю. Код procedure Add_Node_To_Graph; var p,q: refnode; begin new(p); p^.id:=n; p^.infnode:=x; p^.arclist:=nil; p^.next:=graph; graph:=p; end; procedure Add_Arc_To_Graph; var a: refarc; begin begin if (p1=nil) or (p2=nil) then writeln('Error: Node is empty!') else begin new(a); {a^.infarc:=x;} a^.adj:=p2; a^.next:=p1^.arclist; p1^.arclist:=a; end; end; end; {...} procedure Browse_D_Graph; var a: refarc; nc,na: integer; begin nc:=0; na:=0; while graph<>nil do begin writeln('Node #',graph^.id); writeln('List of arcs:'); a:=graph^.arclist; {if a=nil then write('Empty!');} while a<>nil do if (a^.adj)^.id=0 then a:=a^.next else begin writeln('Arc to Node #',(a^.adj)^.id); a:=a^.next end; {writeln;} nc:=nc+1; graph:=graph^.next; end; na:=(nc div 2)*(nc-(nc div 2)); writeln('Graph have: ',nc,' - nodes; ',na,' - arcs'); end; Естли кто хочет взяться в серъёз, вот моя ася (304592952) - чтобы быстрей всё уяснить и думать вместе on-line (я почти круглые сутки в инете). Sorry, если я слишком наглею ![]() Сообщение отредактировано: APAL - 2.08.2004 10:14 -------------------- The Truth Is Out There...
|
virt |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Maximus
а ты не из Казани? -------------------- |
Maximus |
![]()
Сообщение
#8
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Из Перми я! Ну где вы там, помогите?!
-------------------- The Truth Is Out There...
|
APAL |
![]()
Сообщение
#9
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Maximus, соблюдай правила оформления.
Заключай исходный код в соответствующие теги. -------------------- |
Maximus |
![]()
Сообщение
#10
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: ![]() ![]() ![]() |
Извиняюсь, я тут новенький!
![]() ![]() -------------------- The Truth Is Out There...
|
BlackShadow |
![]()
Сообщение
#11
|
Гость ![]() |
Давай сначала и подробно. Что на входе и что на выходе. Только точно. Можно с примерами, а то у тебя это всё несколько размывчато.
|
BlackShadow |
![]()
Сообщение
#12
|
Гость ![]() |
Проведена разъяснительная беседа по аське. Вроде как вопрос решён.
Maximus, если остались вопросы, то кидай в аську. |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 17:42 |