Потом строку с этим же минимальным элементом поменять местами с первой строкой. В итоге этот элемент окажется в левом верхнем углу. Потом найти минимальный элемент массива снова но уже без первой строки и столбца и таким же образом поменять местами со второй строкой и столбцом. И так далее. В итоге на главной диагонали окажутся все минимальные элементы.
uses crt;
const nmax=20;
type matr=array[1..nmax,1..nmax] of integer;
procedure Obmen(var mt:matr;k,n:byte);
var i,j,imn,jmn:byte;
x:integer;
begin
imn:=k;jmn:=k;
for i:=k to n do
for j:=k to n do
if mt[i,j]<mt[imn,jmn] then
begin
imn:=i;
jmn:=j;
end;
for i:=k to n do
begin
x:=mt[k,i];
mt[k,i]:=mt[imn,i];
mt[imn,i]:=x;
end;
for i:=k to n do
begin
x:=mt[i,k];
mt[i,k]:=mt[i,jmn];
mt[i,jmn]:=x;
end;
for i:=1 to n do
begin
for j:=1 to n do
if((i=k)and(j>=k))or((i>=k)and(j=k)) then
begin
textcolor(k+1);
write(mt[i,j]:4);
end
else
begin
textcolor(15);
write(mt[i,j]:4);
end;
writeln;
end;
writeln;
write('Press Enter...');
readln;
clrscr
end;
var a:matr;
n,i,j:byte;
begin
clrscr;
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(40)+10;
write(a[i,j]:4);
end;
writeln;
end;
writeln;
for i:=1 to n-1 do
Obmen(a,i,n);
end.