Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 17:40   #1
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
Вопрос Нарисовать дерево (связный граф без циклов) в Pascal

Здравствуйте, ув. форумчане!

Есть решенная задача на Паскале. Вот ее условия:
Разработать программу «Охрана помещений» методом решения задач на деревьях.
Исходные данные:
Для организации охраны помещения (коридоры которого образуют дерево) надо расставить минимальное количество охранников в вершины так, чтобы они могли обозревать все дуги. Ваша программа должна найти минимальное количество стражников, которое нужно расставить в вершины данного дерева.
Пример дерева:

Вот решение задачи:
Код:
Program Strazha;
uses crt;
const
MaxN=1500;
MaxE=20;
label nachalo;
var
G :        array [0..MaxN-1,1..MaxE] of integer;
Power : array [0..MaxN] of integer;
Deleted, Node, N, i, j, m : integer;
ch: char;
procedure InputData;
 var X,Y: integer;
begin
write ('Введите количество вершин: ');
readln(N);
for i:=0 to N-1 do Power[i]:=0;
for i:=0 to N-1 do
 begin
  write ('   Введите кол-во дорог для вершины ',i,': ');
  readln (X);
   for j:= 1 to X do
    begin
     write ('      Введите номер вершины для ',j,'-ой дороги: ');
     readln(Y);
     inc (Power[i]); G[i,Power[i]]:=Y;
     inc (Power[Y]); G[Y,Power[Y]]:=i;
    end;
 end;
end;


function MaxPower(var Node: integer): integer;
begin
m:=Power[N-1]; Node:=N-1;
for i:=N-2 downto 0 do
 if Power[i]>m
  then begin m:=Power[i]; Node:=i; end;
MaxPower:=m;
end;

procedure Annigilate(Node: integer);
begin
 j:=1;
 for i:=1 to Power[Node] do
  begin
   while Power[G[Node,j]]=0 do inc(j);
   dec(Power[G[Node,j]]);
   inc(j);
  end;
 Power[Node]:=0;
end;

begin
textbackground(15);
textcolor(0);
clrscr;
writeln ('       Вас приветствует программа "Охрана помещений"!');
nachalo:
writeln;
InputData;
Deleted:=0;
 while MaxPower(Node)<>0 do
  begin
     Annigilate(Node);
      inc(Deleted);
  end;
 writeln;
 writeln ('Минимальное количество охранников для этого помещения: ',Deleted);
 writeln;
 repeat
 write ('Для выхода нажмите <Esc>');
 ch:=readkey;
 if ch=#27 then halt;
 until ch= #27;
end.
Здесь исходное дерево представлено следующим образом:
Power[i] - степень вершины i
G[i,j] - номер вершины, в которую есть ребро из вершины i (для всех j от 1 до Power[i])

Теперь нужно добавить к задаче, чтобы после выдачи сообщения о минимальном количестве стражников программа рисовала бы исходное дерево с номерами вершин, и вершины, в которые нужно поставить этих стражников были каким-либо образом помечены. Я понимаю, что это надо делать используя модуль Graph, но ват саму процедуру вывода не могу придумать. Может кто-нибудь уже сталкивался с такой проблемой? Помогите советом, пожалуйста
Машуля вне форума Ответить с цитированием
Старый 16.12.2010, 14:59   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

ищи по словам:
укладка графа
планарный граф
планарность.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 17.12.2010, 20:09   #3
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
ищи по словам:
укладка графа
планарный граф
планарность.
спасибо за подсказку
Машуля вне форума Ответить с цитированием
Старый 20.12.2010, 13:28   #4
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
По умолчанию

Написала алгоритм (применительно к моей задаче), который вырисовывает исходное дерево и помечает вершины с охранниками. Так что кому надо нарисовать дерево в Паскаль - пользуйтесь.
Правда у меня были проблемы с графическим режимом (виртуальная машина NTVDM), поэтому я использовала заглушку для DOSBox
Вложения
Тип файла: rar guard.rar (1.54 Мб, 57 просмотров)
Машуля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать иерархическое дерево vandrouny Общие вопросы Delphi 0 05.12.2010 16:41
Pascal!!! Эйлеровый граф Ikram Помощь студентам 2 16.05.2010 16:51
Помогите нарисовать граф в Exsel. Ol'ga Общие вопросы Delphi 2 13.06.2009 08:39
[Делфи]Как вывести из мемо все что есть (без циклов и массивов) zotox Помощь студентам 3 03.05.2009 20:25