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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 23:15   #1
Freez
 
Регистрация: 08.04.2009
Сообщений: 5
По умолчанию Кто-нибудь есть спец по графам, помогите сделать программу ....

Помогите её сделать, хотябы начало.Ато я даже ума не преложу как её делать


Неориентированный граф G=(x,y), где х- множество вершин графа, u- множество рёбер задан списком рёбер.По заданному списку рёбер определить степени всех вершин графа и вершинус максимальной степенью. Удалить из списка рёбер все рёбра, инцидентные найденой вершине и сформировать матрицу связности графа, полученного после удаления.
Freez вне форума Ответить с цитированием
Старый 09.04.2009, 23:32   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Чтобы студенты могли приложить ум, им перед этим показываются решения аналогичных задач.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 10.04.2009, 00:57   #3
qpokyc
Форумчанин
 
Аватар для qpokyc
 
Регистрация: 07.04.2009
Сообщений: 117
По умолчанию

О графах:
http://ru.wikipedia.org/wiki/Граф_(математика)

Чо тк. поисковик отвечать не нужно?))

Вот массивы в Паскале (пригодится)

Объявляется так:
Код:
{ сначала константы }
const
  x = <количество вершин>;
  half_y = <количество ребер, деленое на два>;

{ потом типы }
type
  tVertex = <тип значения вершины>;            // значения в вершинах
  tVertexMesh = array [0..x] of tVertex;          // массив вершин
  tLinksMesh = array [0..half_y] of array of integer; // массив ребер

{ теперь переменные }
var
  VertexMesh: tVertexMesh;
  LinksMesh: tLinksMesh;
Пояснения: Здесь массив вершин (VertexMesh) мб вовсе не нужен, а tLinksMesh может потребовать такого объявления:

Код:
tLink = record
  Vertex_a: integer;
  Vertex_b: integer;
  <дополнительно>
end;

tLinksMesh = array [half_y] of tLink;
Это если ребра исчо имеют вес. Так вот ребра заносить в массив LinksMesh по принципу LinksMesh[<индекс вершины>][<индекс вершины>], стараясь обрабатывать исключения:
1) недопускать совпадения индексов в одной строчке (типа [1,1])
2) недопускать аналогичных строчек (типа [1,2] и [2,1]) - вот по этому количество ребер и надо делить на два!

Все! Властвуй над этими структурами, решая задачу по человечему (в смысле как на паре в тетрадке решаешь)). А как конкретно задучу решить - извиняй, тут форум программистов а не матиматиков-любителей помочь халявщикам)).
Copyright © qpokyc (qpy[the dog]bk.ru), 2008-2009 г.
qpokyc вне форума Ответить с цитированием
Старый 10.04.2009, 01:02   #4
qpokyc
Форумчанин
 
Аватар для qpokyc
 
Регистрация: 07.04.2009
Сообщений: 117
По умолчанию

Сори, чота меня раскумарило:
Код:
tLinkMesh = array [0..half_y] of integer
Так будет правильно (прошлый вариант ф топку), ну, вобщем, идею передал, а дальше все в учебнике прочесть можно.
Copyright © qpokyc (qpy[the dog]bk.ru), 2008-2009 г.
qpokyc вне форума Ответить с цитированием
Старый 10.04.2009, 02:06   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от qpokyc Посмотреть сообщение
Так будет правильно (прошлый вариант ф топку), ну, вобщем, идею передал, а дальше все в учебнике прочесть можно.
А при чём тут топка — можно нажать на "Правку" и исправить. Свой пост.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 10.04.2009, 12:27   #6
Freez
 
Регистрация: 08.04.2009
Сообщений: 5
По умолчанию

Мне бы переделать вот эту прогу под свою задачу

uses crt,graph;
Type
T=^elem;
elem=record
nv:integer;
adr:T;
end;
Var First:T;
MI:array[1..10,1..50] of integer;
MS:array[1..10,1..10] of byte;
md:array[1..10] of byte;
Vmax,n,d,sj,ku:byte;
f:text;
FILENAME:string[12];
sym:char;
PROCEDURE VVOD;
Var tu,pu:T;
Begin
n:=0;
d:=0;
Reset(f);
New(tu);
first:=tu;
while not eof(f) do
begin
read(f,tu^.nV);
if (tu^.nV<0) and (abs(tu^.nV)>n)
then n:=abs(tu^.nV)
else if tu^.nV>0
then inc(d);
pu:=tu;
new(tu);
pu^.adr:=tu;
end;
pu^.adr:=nil;
dispose(tu);
End;
PROCEDURE VIVOD(x:integer;key:byte);
Var tu:T;
x1,y:integer;
st:string;
Begin
y:=40;
x1:=x;
tu:=First;
While tu<>nil do
begin
str(tu^.nV,st);
outtextxy(x1,y,st);
x1:=x1+25;
if (key=1)and (x1>310)
or (key=2)and (x1>650) then
begin
x1:=x;
y:=y+25;
end;
tu:=tu^.adr;
end;
str(n,st);
outtextxy(x,y+15,'VERSHIN-'+st);
str(d,st);
outtextxy(x+100,y+15,'DUG-'+st);
End;
PROCEDURE DELETE;
Var
i,j,key:byte;
tu,pu:T;
begin
ku:=0;
tu:=first;
while tu<>nil do
begin
if tu^.nv=-Vmax then
begin
tu:=tu^.adr;
while (tu<>nil) and (tu^.nv>0) do
begin
key:=0;
for i:=1 to ku do
if tu^.nv=md[i] then
key:=1;
if key=0 then
begin
inc(ku);
md[ku]:=tu^.nv;
tu:=tu^.adr;
end;
end;
break;
end;
tu:=tu^.adr;
end;
for i:=1 to ku do
for j:=1 to n do
begin
ms[md[i],j]:=0;
ms[j,md[i]]:=0;
end;
{delete}
for i:=1 to ku do
begin
tu:=first;
while tu<>nil do
begin
if tu^.nv=-md[i] then
begin
if tu=first then
first:=tu^.adr
else
begin
pu^.adr:=tu^.adr;
tu:=pu;
end;
tu:=tu^.adr;
while(tu<>nil) and (tu^.nv>0) do
begin
dec(d);
if tu=first then
first:=tu^.adr
else
begin
pu^.adr:=tu^.adr;
tu:=pu;
end;
end;
end
else if tu^.nv=md[i] then
begin
pu^.adr:=tu^.adr;
tu:=pu;
dec(d);
end;
pu:=tu;
tu:=tu^.adr;
end;
end;
end;
PROCEDURE FORMI;
var
k,i,j:byte;
tu:T;
sym:string;
xn,x,y:integer;
begin
for i:=1 to n do
for j:=1 to d do
MI[i,j]:=0;
tu:=first;
sj:=0;
while tu<>nil do
begin
if tu^.nv<0 then
i:=-tu^.nv
else
begin
k:=tu^.nv;
inc(sj);
MI[i,sj]:=1;
MI[k,sj]:=-1;
end;
tu:=tu^.adr;
end;

Y:=350;
XN:=350;
Outtextxy(390,335,'MATRICA INCIDENCIY');
for i:=1 to n do
begin
x:=xn;
for j:=1 to d do
begin
str(MI[i,j],sym);
outtextxy(x,y,sym);
x:=x+25;
end;
y:=y+15;
end;
end;
{FOR MI}

BEGIN
writeln('vvod filename');
readln(filename);
assign(f,filename);
initgr;
rismenu;
repeat
sym:=readkey;
case sym of
'1':
begin
VVOD;VIVOD(20,1);FORMS(20);RISGRAF( 140);
end;
'2':
begin
STEPEN;DELETE;VIVOD(340,2);FORMS(34 0);RISGRAF(460);FORMI;
end;
'3':halt;
end;
until sym=#27;
readkey;
closegraph;
end.
Freez вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите кто нибудь с 3 задачками ByteMan Помощь студентам 2 07.06.2007 15:10