Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for - PascalABC.NET
Формулировка задачи:
Решение задачи: «Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for»
textual
Листинг программы
program Ford_Bellman;
uses crt;
const
inf=100000;
Vmax=1000;
Emax=Vmax*(Vmax-1) div 2;
type Edges=record
u, v, w: integer;
end;
Var
e, n, w, start: integer;
edge: array[1..Emax] of Edges;
d: array[1..Vmax] of integer;
{алгоритм Беллмана-Форда}
procedure FB(n, s: integer);
var i,j:integer;
begin
for i:=1 to n do
d[i]:=inf;
d[s]:=0;
for i:=1 to n-1 do
for j:=1 to e-1 do
if d[edge[j].v]+edge[j].w<d[edge[j].u] then
d[edge[j].u]:=d[edge[j].v]+edge[j].w;
for i:=1 to n do if d[i]=inf then
writeln(start, '->', i, '=', 'Not')
else writeln(start, '->', i, '=', d[i]);
end;
{основной блок программы}
var i,j:integer;
begin
clrscr;
write('Количество вершин > '); read(n);
e:=1;
for i:=1 to n do
for j:=1 to n do
begin
write('Вес ', i, '->', j, ' > '); read(w);
if w<>0 then
begin
edge[e].v:=i;
edge[e].u:=j;
edge[e].w:=w;
e:=e+1;
end;
end;
write('Стартовая вершина > '); read(start);
writeln('Список кратчайших путей:');
FB(n, start);
end.
Объяснение кода листинга программы
- Программа Ford_Bellman.
- Используется для решения задачи о кратчайшем пути во взвешенном графе.
- Задается количество вершин графа (n), стартовая вершина (start) и веса ребер (w) между вершинами.
- В основной блок программы записывается количество вершин (n), затем в цикле с помощью функции read() с клавиатуры читаются веса ребер (w) между вершинами.
- В цикле формируется массив edge[] из ребер графа.
- Затем вызывается процедура FB(n, start), которая находит кратчайшие пути от стартовой вершины до всех остальных вершин графа.
- В процедуре FB(n, start) в цикле считаются расстояния от стартовой вершины до всех остальных вершин графа с помощью алгоритма Беллмана-Форда.
- Если расстояние до какой-либо вершины равно бесконечности (inf), то это означает, что до этой вершины нет пути из стартовой вершины.
- В конце процедуры FB(n, start) выводятся на экран все найденные кратчайшие пути.
- В конце программы выводится на экран список кратчайших путей.