Главная /
Программирование на языке Pascal /
Какой алгоритм реализует приведенная ниже программа?const nnn = 10000; type uk = ^ukk; ukk = record v: integer; next: uk; end; var head: array[1..nnn] of uk; a: array[1..nnn] of integer; ii,i,j,k,n: integer; q,p: uk; f: text; procedure dob(ii,jj: integer)
Какой алгоритм реализует приведенная ниже программа?const nnn = 10000;
type uk = ^ukk;
ukk = record v: integer;
next: uk;
end;
var head: array[1..nnn] of uk;
a: array[1..nnn] of integer;
ii,i,j,k,n: integer;
q,p: uk;
f: text;
procedure dob(ii,jj: integer); {добавление ребра}
var pp,qq: uk;
begin
new(qq);
qq^.v:=jj;
qq^.next:=nil;
if head[ii]=nil
then head[ii]:=qq {вставка первого}
else begin {вставка остальных}
pp:=head[ii];
while pp^.next<>nil do pp:=pp^.next;
pp^.next:=qq;
end;
end;
begin
{------- считывание графа ------------}
...
readln(f,n); {кол-во вершин в графе}
while not eof(f) do
begin
read(f,i,j);
if i<>j then begin
dob(j,i);
dob(i,j);
end;
end;
{--------- инициация массива ---------}
for i:=1 to n do begin
head[i]:=nil;
a[i]:=0;
end;
{------- основная часть -------------}
k:=0;
i:=1;
repeat
k:=k+1;
a[i]:=k;
p:=head[i];
while p<>nil do
begin
j:=p^.v;
a[j]:=k;
if (head[j]<>nil) and (i<>j)
then begin
q:=p;
while q^.next<>nil do q:=q^.next;
q^.next:=head[j];
head[j]:=nil;
end;
p:=p^.next;
end;
i:=i+1;
while (head[i]=nil) and (i<=n) do i:=i+1;
until i=n+1;
for i:=1 to n do
if a[i]=0 then k:=k+1;
writeln(k); {выдача результата}
end.
вопрос
Правильный ответ:
подсчет количества компонент связности
нахождение минимального каркаса в связном графе
нахождение кратчайшего пути между двумя выделенными вершинами
Сложность вопроса
53
Сложность курса: Программирование на языке Pascal
75
Оценить вопрос
Комментарии:
Аноним
Спасибо за подсказками по intiut'у.
24 дек 2020
Аноним
Благодарю за тесты по intiut'у.
27 мар 2016
Другие ответы на вопросы из темы программирование интуит.
- # Процесс поиска и исправления синтаксических и логических ошибок в программе называется
- # Какой стандартной функции или процедуре обработки строк эквивалентен следующий программный отрывок? {s1,s2: string; i,j,t1,t2: byte} i:=0; res:= ''; t1:= byte(s1[0]); t2:= byte(s2[0]); if i > t2 then i:= t2+1; for j:= 1 to i-1 do res:= res + s2[j]; for j:= 1 to t1 do res:= res + s1[j]; for j:= i to t2 do res:= res + s2[j];
- # Переменные каких типов можно выводить в текстовый файл при помощи команд write() или writeln()?
- # Какие вызовы процедуры procedure p(var a: byte; const b: char; x: real); являются неправильными с точки зрения компилятора языка Pascal?
- # Какие из приведенных ниже подпрограмм вычисляют функцию двойного факториала (n!!), определяемую следующим образом: 0!! =1 1!! = 1 n!! = n*(n-2)!!, для любого натурального n.