Большой Воронежский Форум
» Программирование>кто нибудь помогите с задачей
sv_mix 15:01 26.07.2008
Привет))
Может кто-нибудь сможет мне помочь с задачей(у меня чтото никак не получается)..
Язык впринципе не имеет значения, но лучше на delphi..

Условия: дана матрицаТ[i,j]=
(5 4 0 0 8
0 10 0 4 7
0 3 13 14 11
4 3 4 0 0
8 0 0 12 0
6 0 8 24 14)
для нее строится матрица X той же размерности по следующим правилам:
x[1,1]=t[1,1] (первый элемент)
x[1,j]=x[1,j-1]+t[1,j] (первая строка начиная со второго элемента)
x[i,1]=x[i-1,1]+t[i,1] (первый столбец начиная со второго элемента)
x[i,j]=max{x[i-1,j];x[i,j-1]}+t[i,j] (все остальные элементы)

И собственно сама задача:
Нужно перебрать все варианты перестановки строк(столбцы остаются неизменными) в исходной матрице Т и вывести на экран ту матрицу Т, для которой последний элемент матрицы Х будет минимален [Ответ]
Pengvin 16:14 26.07.2008
пыщ пыщ!!!1!1!

Сообщение от :
program pp;

{$APPTYPE CONSOLE}


uses
SysUtils;
const
n=10;
m=10;


type
matrix = array[1..n,1..m] of integer;

var
T,X,final: matrix;
p,q : integer;


function max( a,b : integer) : integer;
begin
if (a>=b) then result:=a;
if (a<b) then result:=a;
end;

function BuildMatrix : matrix;
var
res : matrix;
i,j : integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
begin
res[1,1]:=t[1,1]; //(ïåðâûé ýëåìåíò)
res[1,j]:=res[1,j-1]+t[1,j];// (ïåðâàÿ ñòðîêà íà÷èíàÿ ñî âòîðîãî ýëåìåíòà)
res[i,1]:=res[i-1,1]+t[i,1] ;//(ïåðâûé ñòîëáåö íà÷èíàÿ ñî âòîðîãî ýëåìåíòà)
res[i,j]:=max(res[i-1,j],res[i,j-1])+t[i,j];// (âñå îñòàëüíûå ýëåìåíòû)
end;
end;
result:=res;
end;
procedure SwapRow(r1,r2:integer);
var
tmp : integer;
j : integer;
begin
for j:=1 to m do
begin
tmp:=t[r1,j];
t[r1,j]:=t[r2,j];
t[r2,j]:=tmp;
end;
end;
procedure PrintMAtrix(mat : matrix);
var
i,j : integer;
begin

for i:=1 to n do
begin
for j:=1 to m do
begin
Write(mat[i,j],' ');
end;
Writeln;
end;

end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
randomize;
Writeln('Start matrix T:');
for p:=1 to n do
begin
for q:=1 to m do
begin
t[p,q]:=random(10);
Write(t[p,q],' ');
end;
Writeln;
end;


x:=buildmatrix;
Writeln('Start matrix X:');
printmatrix(x);
final:=t;

for p:=1 to n do
begin
for q:=1 to m do
begin
swaprow(p,q);
if x[n,m]>buildmatrix[n,m] then
begin
final:=t;
x:=buildmatrix;
end;
end;
end;
writeln ('Final matrix T:');
printmatrix(final);
Writeln('FInal matrix X:');
printmatrix(x);
readln;
end.

[Ответ]
artmk 02:43 28.07.2008
мож я и ошибаюсь, но по моему в этом решении непрально найдены перестановки [Ответ]
Pengvin 13:38 28.07.2008
artmk, друх отредактируй как должно быть мне влом [Ответ]
Вверх