Нужна помощь, есть задание, есть его решение. Помогите разобраться в решении. Как что делалось, откуда что взялось, откуда выводились формулы, вобщем словесный алгоритм задачи. Вот задача:
Говорят, что матрица имеет седловую точку Аij, если Aij является минимальным в i-ой строке и максимальным в j-ом столбце. Найти номер строки и столбца какой-нибудь Седловой точки заданной матрицы.
Вот решение:
Говорят, что матрица имеет седловую точку Аij, если Aij является минимальным в i-ой строке и максимальным в j-ом столбце. Найти номер строки и столбца какой-нибудь Седловой точки заданной матрицы.
Вот решение:
01 | program Project2; |
02 | |
03 | const m=3;n=3; |
04 | |
05 | type arr= array [1..m,1..n] of integer; |
06 | |
07 | var a:arr; |
08 | i,j:integer; |
09 | flag:boolean; |
10 | |
11 | function min_in_row(b:arr;l:integer):integer; {возвращает номер минимального элемента в i-той строке} |
12 | var k:integer; |
13 | min,index:integer; |
14 | begin |
15 | min:=maxint;{заведомо большое число} |
16 | for k:=1 to n do |
17 | if (b[l,k]<min) then |
18 | begin |
19 | min:=b[l,k]; |
20 | index:=k; |
21 | end ; |
22 | min_in_row:=index; |
23 | end ; |
24 | |
25 | function max_in_col(b:arr;l:integer):integer; {номер максимального в k-том столбце} |
26 | var k:integer; |
27 | max,index:integer; |
28 | begin |
29 | max:=-maxint; |
30 | for k:=1 to m do |
31 | if (b[k,l]>max) then |
32 | begin |
33 | max:=b[k,l]; |
34 | index:=k; |
35 | end ; |
36 | max_in_col:=index; |
37 | end ; |
38 | |
39 | |
40 | begin |
41 | for i:=1 to m do |
42 | for j:=1 to n do read(a[i,j]); |
43 | i:=0; |
44 | flag:=true; |
45 | while (flag and (i<=m)) do |
46 | begin |
47 | j:=0; |
48 | i:=i+1; |
49 | while (flag and (j<=n)) do |
50 | begin |
51 | j:=j+1; |
52 | flag:= not((a[i,j]=a[i,min_in_row(a,i)]) and (a[i,j]=a[max_in_col(a,j),j])); |
53 | end ; |
54 | end ; |
55 | if ((i<=m) and (j<=n)) then writeln(i,j); |
56 | readln; |
57 | readln; |
58 | end . |