MMATRIX - SHIFT Operator on Matrix

Tác giả: khuc_tuan

Ngôn ngữ: Pascal

// {$APPTYPE CONSOLE}
 {$mode delphi}

var
    best, i, j, n : integer;
    a, b : array[1..7,1..7] of integer;
    p : array[1..7] of integer;

procedure duyet(step : integer);
var
    i, j, k, localmax : integer;
begin
    if step > n then
    begin
        for i := 1 to n do
        begin
            k := p[i];
            for j:=1 to n do
            begin
                b[i,j] := a[i,k];
                inc(k);
                if k > n then k := 1;
            end;
        end;
        localmax := 0;
        for j:=1 to n do
        begin
            k := 0;
            for i:=1 to n do k := k + b[i,j];
            if localmax < k then localmax := k;
        end;
        if best > localmax then best := localmax;
        exit;
    end;
    for k := 1 to n do
    begin
        p[step] := k;
        duyet(step+1);
    end;
end;

begin
    while true do
    begin
        read(n);
        if n=-1 then break;
        for i:=1 to n do
        begin
            for j:=1 to n do
                read(a[i,j]);
        end;
        p[1] := 1;
        best := 1000000000;
        duyet(2);
        writeln(best);
    end;
end.

Download