题目描述 Description
已知n个点(n<=100),给你n*n的方阵,a[i,j]表示从第i个点到第j个点的直接距离。
现在有Q个询问,每个询问两个正整数,a和b,让你求a到b之间的最短路程。
满足a[i,j]=a[j,i];
输入描述 Input Description
第一行一个正整数n,接下来n行每行n个正整数,满足a[i,i]=0,再一行一个Q,接下来Q行,每行两个正整数a和b。
输出描述 Output Description
一共Q行,每行一个整数。
样例输入 Sample Input
3
0 1 1
1 0 3
1 3 0
1
2 3
样例输出 Sample Output
2
题解:floyed裸题
const
maxn=100;
var
f:array[1..maxn,1..maxn]of longint;
n,m,x,y,i:longint;
procedure init;
var
i,j:longint;
begin
readln(n);
fillchar(f,sizeof(f),$7f);
for i:=1 to n do
for j:=1 to n do
read(f[i,j]);
readln;
readln(m);
end;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
procedure floyed;
var
i,j,k:longint;
begin
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (k<>i)and(i<>j)and(j<>k) then
f[i,j]:=min(f[i,k]+f[k,j],f[i,j]);
end;
begin
init;
floyed;
for i:=1 to m do
begin
readln(x,y);
writeln(f[x,y]);
end;
end.