IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Двудольный граф, Построить двудольный граф
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Задача:
Нужно создать двудольный граф (то есть задаются начальные вершины и записываются пока без дуг в один граф, потом каким-то образом нужно разделить его с произвольными кол-вами вершин на две доли и соединить дугами каждую вершину одной доли с каждой вершиной другой доли, причем смежные вершины между собой не соединяются дугами).
Вот динамическая структура, которая должна использоваться:
Код
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 -


--------------------
The Truth Is Out There...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


могу дать все необходимые процедуры вставки Вершины в граф, добавления Дуги(связывающей две вершины) в граф...


--------------------
The Truth Is Out There...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
смежные вершины между собой не соединяются дугами

Вот это очень непонятный момент.

Цитата
могу дать все необходимые процедуры вставки Вершины в граф, добавления Дуги(связывающей две вершины) в граф...

Давай.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Вася Пупкин

Репутация: -  1  +


BlackShadow,Maximus а что вообще такое "двудольный граф"?


--------------------
Стабильность - признак мастерства
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Читай выше. И внимательнее.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Поясняю из теории "Дискретной математики":
Двудольный граф - это граф, множество вершин которого можно разбить на две части(доли) так, что вершины из одной доли не смежно между собой.
Не смежны - то есть не соединены дугой! Смежность - соединённость! Вот!
То бишь к примеру: 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, если я слишком наглею smile.gif

Сообщение отредактировано: APAL -


--------------------
The Truth Is Out There...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


Maximus
а ты не из Казани?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Из Перми я! Ну где вы там, помогите?!


--------------------
The Truth Is Out There...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Maximus, соблюдай правила оформления.
Заключай исходный код в соответствующие теги.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Извиняюсь, я тут новенький! sad.gif Кто-нибудь взялся за мою задачку? smile.gif


--------------------
The Truth Is Out There...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Давай сначала и подробно. Что на входе и что на выходе. Только точно. Можно с примерами, а то у тебя это всё несколько размывчато.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Проведена разъяснительная беседа по аське. Вроде как вопрос решён.

Maximus, если остались вопросы, то кидай в аську.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 21:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name