解题思路:先读入数据,然后用二维数组建一个图,用Dijkstra算法,求最短路,如果有答案就输出,不然就输出-1。
程序:
const
maxn=100;
var
a,b:array[1..maxn,1..maxn] of longint;
v:array[1..maxn] of boolean;
d,f,pre:array[1..maxn] of longint;
m,k,s,e,i,j,x,y,z,n:longint;
function hehe(x,y:longint):boolean;
begin
hehe:=true;
while x<>0 do
begin
if (f[x]=y)or(b[y,f[x]]=1) then exit(false);
x:=pre[x];
end;
end;
procedure dij;
var
min,i,u:longint;
begin
repeat
min:=maxlongint;
u:=0;
for i:=1 to n do
if (d[i]
if u>0 then
begin
v[u]:=false;
for i:=1 to n do
if (v[i])and(d[u]+a[u,i]
begin
d[i]:=d[u]+a[u,i];
pre[i]:=u;
end;
end;
until u=0;
end;
begin
readln(n,m,k,s,e);
for i:=1 to n do
read(f[i]);
for i:=1 to m do
for j:=1 to m do
read(b[i,j]);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=maxlongint div 3;
for i:=1 to k do
begin
readln(x,y,z);
if (b[f[y],f[x]]=0)and(a[x,y]>z) then begin a[x,y]:=z; a[y,x]:=z; end;
end;
for i:=1 to n do
d[i]:=maxlongint div 3;
d[s]:=0;
fillchar(v,sizeof(v),true);
dij;
if d[e]
end.
版权属于: Chris
原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v60m.html
转载时必须以链接形式注明原始出处及本声明。