Помогите, пожалуйста, разобраться, нужно написать код, чтобы ответ был как в MTABLE.EXE, а у меня получается только то, что выведено в data.exe(то есть не правильный второй столбец), понимаю, что нужно исправлять procedure FU, но не понимаю как, подскажите как можно исправить чтобы программа работала правильно?
| Код | uses crt; const MaxN = 5; INF = 1000; type Matrix = array[1..MaxN,1..MaxN] of longint;
var b:array[1..MaxN] of integer; byk:array[1..MaxN] of char; p,a : Matrix; n: integer; f: text;
{ввод данных из файла в переменные и вывод матрицы на экран} procedure Input_Table(var A : Matrix; N : longint; var T : Text); var i, j : longint; begin writeln('Matritsa svjazei:'); while not eof(f) do begin for i := 1 to N do begin for j := 1 to N do begin read(f,a[i,j]); write(' ',a[i,j]); if (a[i,j] = 0) and (i <> j) then a[i,j] := INF; end; writeln; readln(T); end; end; end;
{алгоритм Флойда-Уоршелла} Procedure FU(D: matrix; V: integer); var i,j,k: integer; begin for i:=1 to V do D[i, i]:=0; for k:=1 to V do for i:=1 to V do for j:=1 to V do if (D[i, k]<>0) and (D[k, j]<>0) and (i<>j) then if (D[i, k]+D[k, j]<D[i, j]) or (D[i, j]=0) then D[i, j]:=D[i, k]+D[k, j]; for i:=1 to V do begin for j:=1 to V do begin byk[i]:=chr(64+i); if i=j then b[i]:=0; write(byk[i]:2,b[i]:2,D[i, j]:3,'| '); end; writeln; end; end;
{основная программа} BEGIN clrscr; writeln; assign(f,'data.txt'); reset(f); readln(f,n); writeln('Kolichestvo yzlov - ',n); writeln; Input_Table(a,n,f); close(f); writeln; writeln('Rezyltat:'); FU(a, n); readln; END.
|
В файле data.txt записаны следующие данные: 5 0 9 0 5 0 9 0 5 3 2 0 5 0 0 4 5 3 0 0 7 0 2 4 7 0 |