Матрица в паскале

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
Melfis
Сообщения: 2
Зарегистрирован: 14 фев 2010, 16:13

Помогите пожалуйста решить задачу на паскале. Написать программу. Граф задан матрицей инцеденции. Определить является ли он антисимметричным или полным антисимметричным. Достроить до полного антисимметричного графа если он таковым не является. 6<n<10. Я просто в тупике насколько понял работа должны производится только с матрицей инциденции и на выходе должна быть она же Помогите плиз.
Melfis
Сообщения: 2
Зарегистрирован: 14 фев 2010, 16:13

Если кому интересно решение будет выглядеть вот так: Функции конвертирования матриц из Инциденции в Смежности и из смежности в Инциденции в программу включены.
[DELPHI]program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

const
MaxUp=4;
MaxRg=4;

var
G: array[1.. MaxUp, 1..MaxRg] of integer;
GT: array[1.. MaxUp, 1..MaxUp] of integer;
GN: array[1.. MaxUp, 1..6] of integer;
i, z, x, temp, st, sr, trg: integer;
begin
G[1,1]:=1;
G[1,2]:=0;
G[1,3]:=1;
G[1,4]:=0;

G[2,1]:=0;
G[2,2]:=1;
G[2,3]:=1;
G[2,4]:=0;

G[3,1]:=0;
G[3,2]:=1;
G[3,3]:=0;
G[3,4]:=1;

G[4,1]:=1;
G[4,2]:=0;
G[4,3]:=0;
G[4,4]:=1;


{------SEEK THIS--------------}
Write('Start matrix:');
for i:=1 to MaxUp do
begin
WriteLn('');
for z:=1 to MaxRg do
begin
Write(G[i,z]);
end;
end;
{------END SEEK THIS----------}


{------Convert Matrix to SMJ---------------------------------------------------}
for i:=1 to MaxUp do
begin
for z:=1 to MaxRg do
begin
st:=0;
if (G[i,z]=1) and (st<>1) then
begin
for x:=i+1 to MaxUp do
if G[x,z]=1 then
begin
GT[i,x]:=1;
GT[x,i]:=1;
end;
st:=1;
end;
end;
end;
{------END Convert Matrix to SMJ-----------------------------------------------}



{------SEEK THIS--------------}
WriteLn('');
WriteLn('');
Write('Matrca smejnisti:');
for i:=1 to MaxUp do
begin
WriteLn('');
for z:=1 to MaxUp do
begin
Write(GT[i,z]);
end;
end;
{------END SEEK THIS----------}

{------Chek And rebuild--------------------------------------------------------}
for i:=1 to maxUp do
for z:=1 to maxUp do
temp:=temp+GT[i,z];

WriteLn('');
WritelN('Summ of points: ', temp);
trg:=trunc(((maxUp*maxUp)-maxUp)/2);
if (temp>trg) or (temp<trg) then
WriteLn('NOT SUMMETIC!!! Rebuilding.');

for i:=1 to MaxUp do
for z:=1 to MaxUp do
begin
if (GT[i,z]=1) and (GT[z,i]=1) and (i<>z) then
GT[z,i]:=0;

if (GT[i,z]=0) and (GT[z,i]=0) and (i<>z) then
GT[i,z]:=1;

if (GT[i,z]=0) and (GT[z,i]=1) and (i<>z) then

if (GT[i,z]=1) and (GT[z,i]=0) and (i<>z) then

end;
{------END Chek And rebuild----------------------------------------------------}


{------SEEK THIS--------------}
WriteLn('');
Write('Rebuilding Matrca Smejnisti:');
for i:=1 to MaxUp do
begin
WriteLn('');
for z:=1 to MaxUp do
begin
Write(GT[i,z]);
end;
end;
{------END SEEK THIS----------}



{------Convert Matix to INC----------------------------------------------------}

sr:=1;
for i:=1 to MaxUp do
for z:=1 to MaxUp do
begin
if GT[i,z]=1 then
begin
GN[z,sr]:=1;
GN[i,sr]:=1;
sr:=sr+1;
end;

end;


{------END Convert Matix to INC------------------------------------------------}


{------SEEK THIS--------------}
Write('NEW matrix:');
for i:=1 to MaxUp do
begin
WriteLn('');
for z:=1 to 6 do
begin
Write(GN[i,z]);
end;
end;
{------END SEEK THIS----------}

ReadLn;
end.
[/DELPHI]
Ответить