Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обслуж. центры.doc
Скачиваний:
2
Добавлен:
07.09.2019
Размер:
163.33 Кб
Скачать

Утверждение 2.

Расстояние между внутренними точками дуги i-j и максимально удаленной от них вершиной равно

(MaxI + MaxJ + A[i, j])2.

Доказательство.

Заметим, что вершины k1 и k2 являются наиболее удаленными от дуги i-j (если бы существовала вершина k3 более удаленная, чем k1 и k2, то она была бы более удаленной или от i, или от j).

Пусть x – абсолютный центр дуги i-j – внутренняя точка дуги (вершины при поиске абсолютного центра рассматриваются отдельно). Тогда вершины k1 и k2 равноудалены от точки x, иначе точку x можно было сдвинуть в точку x* с меньшим расстоянием от наиболее удаленной вершины.

Таким образом, D[k1, x]=D[k2, x], если точка x – абсолютный центр дуги i-j. Сумма D[k1, x]+D[k2, x] в точности равна MaxI + MaxJ + A[i, j] и расстояние между дугой и наиболее удаленной вершиной равно D[k1, x]=D[k2, x]=

(MaxI + MaxJ + A[i, j])2, ч.т.д.

Алгоритм. {Абсолютный центр}

Данные: неориентированный граф G=<V, E>, неотрицательная матрица весов A[u,v], u,vV.

Результаты: абсолютный центр графа G, находящийся на расстоянии x от вершины i дуги i-j.

1 begin

2 floyd; {формирование матрицы расстояний D алгоритмом Флойда}

  1. minmax:=inf; r:=0; {minmax – расстояние от абсолютного центра r до самой удаленной вершины }

{поиск центра в вершинах}

  1. for i:=1 to n do

  2. begin

  3. Max:=D[i,1]; {Max – расстояние до наиболее удаленной от i вершины}

  4. for j:=2 to n do

  5. if D[i,j]> Max then Max:=D[i,j];

  6. if minmax> Max then

  7. begin

  8. r:=i;

  9. minmax:= Max;

  10. end;

  11. end;

  12. writeln(’Центр находится в вершине ’,r,’ расстояние до самой удаленной вершины ’,minmax:5:2);

{поиск абсолютного центра на дугах}

  1. for i:=1 to n-1 do

  2. for j:=i+1 to n do

  3. if A[i,j]<inf then {дуга i-j существует}

  4. begin

  5. MaxI:=0; {расстояние от i до самой удаленной вершины}

  6. MaxJ:=0; {расстояние от j до самой удаленной вершины}

  7. for k:=1 to n do

  8. if (k<>i) and (k<>j) then

  9. begin

  10. if D[i,k]<inf then di:=D[i,k];

  11. if D[j,k]<inf then dj:=D[i,k];

  12. if di>dj then{k ближе к j}

  13. begin

  14. if dj>MaxJ then {k наиболее удаленная от j вершина}

  15. MaxJ:=dj;

  16. end

  17. else {k ближе к i}

  18. begin

  19. if di>MaxI then {k наиболее удаленная от i вершина}

  20. MaxI:=di;

  21. end;

  22. end; {перебрали все вершины для дуги i-j}

{dist – расстояние от дуги i-j до наиболее удаленной вершины}

  1. dist:=(MaxI+A[i,j]+MaxJ)/2;

  2. x:=dist-MaxI; {расстояние абсолютного центра от вершины i}

  3. if (dist<minmax)and

  4. (x>0)and(A[i,j]-x>0){условие внутренней точки}

  5. then

  6. begin

  7. minmax:=dist;

  8. writeln(’Абсолютный центр для дуги ’, i,’-’,j,’ находиться на расстоянии ’,x:5:2,’ от вершины ’);

  9. writeln(’Расстояние от наиболее удаленной вершины ’, minmax:5:2);

  10. end;

  11. end;

  12. end.