SSL1760商店选址问题
题目
给出一个城市的地图(用邻接矩阵表示),商店设在一点,使各个地方到商店距离之和最短。
题意
求图的中心点
题解
求图的中心,先用Floyd求所有点之间的最短路径,再在这些点中找一个到所有点的最短路径之和最短的点。
时间复杂度:Floyd=O(n*n*n)
代码
var
i,j,n,k,x,min,ans,t:longint;
a:array[1..200,0..200]of longint;
begin
readln(n);
fillchar(a,sizeof(a),$7f);
for i:=1 to n do
for j:=1 to n do
begin
read(a[i,j]);
if a[i,j]=0 then a[i,j]:=a[1,0];
end;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (a[i,j]<a[1,0])and(a[i,k]+a[k,j]<a[i,j]) then
begin
a[i,j]:=a[i,k]+a[k,j];
end;
min:=maxlongint;
for i:=1 to n do
begin
k:=0;
for j:=1 to n do
if (a[i,j]<a[1,0]) then k:=k+a[i,j];
if k<min then min:=k;
end;
writeln(min);
end.