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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2008, 15:50   #1
sv_mix
Новичок
Джуниор
 
Аватар для sv_mix
 
Регистрация: 26.07.2008
Сообщений: 1
Стрелка перебрать все варианты перестановки строк

Привет))
Может кто-нибудь сможет мне помочь с задачей(у меня чтото никак не получается)..
Язык впринципе не имеет значения, но лучше на 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] (все остальные элементы)

И собственно сама задача:
Нужно перебрать все варианты перестановки строк(столбцы остаются неизменными) в исходной матрице Т и вывести на экран ту матрицу Т, для которой последний элемент матрицы Х будет минимален

From Stilet: Тему нужно называть так чтоб было понятно о чем речь идет. В следующий раз закрою.

Последний раз редактировалось Stilet; 28.07.2008 в 10:24.
sv_mix вне форума Ответить с цитированием
Старый 26.07.2008, 17:34   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  mat = array[1..6, 1..5] of integer;

const
  TT: mat = (
  (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)
   );

var
  x, T, minT: mat;
  tmp: integer;
  i, j, k, min: integer;


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

procedure ForMatrixX; //заполняем матрицу х по правилу
var
  i, j: integer;
begin
  x[1, 1] := T[1, 1];
  for i := 2 to 6 do
    x[i, 1] := x[i-1, 1] + T[i, 1];
  for j := 2 to 5 do
    x[1, j] := x[1, j-1] + T[1, j];
  for i := 2 to 6 do
  for j := 2 to 5 do
  x[i, j] := max(x[i-1, j], x[i, j-1]) + T[i,j];
end;

begin
  T := TT;
  ForMatrixX; //матрица х для исходной матрицы Т
  min := x[6, 5]; //запомним последний элемент
  minT := T; //предположим эта матрица искомая
  for i := 1 to 6-1 do  //перебираем все
  for j := i+1 to 6 do  //строки в матрице Т
  begin
    T := TT; //возврат к исходной матрице
    for k := 1 to 5 do //перестановка 2-х сторок
    begin
      tmp := T[j, k];
      T[j, k] := T[i, k];
      T[i, k] := tmp
    end;
    ForMatrixX; //строим новую матрицу х для новой Т
    if x[6, 5] < min then //если в ней посл эл меньше то запомним
    begin
      minT := T; //и искомую матрицу
      min := x[6, 5] //этот элемент
    end;
  end;

  for i := 1 to 6 do //вывод на экран
  begin
    for j := 1 to 5 do write(minT[i, j]:4);
    writeln
  end;
  readln
end.
eoln вне форума Ответить с цитированием
Старый 26.07.2008, 17:48   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Посмотри мой исходник. Я там по действиям вроде все разложил.
Только вот с минимальным элементом вопрос - тебе надо, чтобы на месте последнего элемента стояла 21 или 5 (смотри программу в работе) все-таки?
Вложения
Тип файла: rar na forum matrix.rar (6.0 Кб, 25 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Варианты курсора(Delphi) IGoDoVaN Помощь студентам 25 18.02.2009 21:48
программа перестановки чисел натурального ряда от 1 до 10 Ольга 01 Общие вопросы C/C++ 1 28.07.2008 20:09
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14