A B -1
B C -1
A C -2
这种情况中,A C 就要变成-1,就是说当A C为-2,A B >=-1,B C>=-1时,A C就要变为-1
编完后总感觉数据有点坑,这里贴上我WA的程序,希望有人能帮忙检查下,读入哪里错了!因为其他部分都没问题,因为换另一种读入AC了!所以就可能是读入问题了。
//------------偶是朴素的分界线------------------
const max=maxint*100;
var i,j,n,m,k,g,h:longint;
s:string;
a,b,e:array[0..500] of string;
d:array[0..500,0..500] of longint;
f:ansistring;
function find(s:string):longint;
var i,j:longint;
t:string;
begin
s:=' '+s+' ';
j:=length(s);
i:=pos(s,f);
t:=copy(f,i+j,255);
i:=pos(' ',t);
delete(t,i,255);
val(t,j);
exit(j);
end;
begin
readln(m); f:=' '; n:=0; h:=0;
fillchar(d,sizeof(d),0);
for i:=1 to 100 do
for j:=1 to 100 do d[i,j]:=max+1;
for i:=1 to m do
begin
readln(s);
//-----------------------
j:=pos(' ',s);
a[i]:=copy(s,1,j-1);
delete(s,1,j);
j:=pos(' ',s);
b[i]:=copy(s,1,j-1);
delete(s,1,j);
val(s,k);
//-----------------------
g:=pos(' '+a[i]+' ',f);
if (g=0) then
begin
inc(n);
if (a[i]='ZMC')and(h=0) then h:=n;
f:=f+a[i]+' '+chr(n+48)+' ';
e[n]:=a[i];
end;
//-----------------------
g:=pos(' '+b[i]+' ',f);
if (g=0) then
begin
inc(n);
if (b[i]='ZMC')and(h=0) then h:=n;
f:=f+b[i]+' '+chr(n+48)+' ';
e[n]:=b[i];
end;
//-----------------------
if (k>-1) then d[find(a[i]),find(b[i])]:=k;
if (k=-1) then d[find(a[i]),find(b[i])]:=max;
if (k=-2) then d[find(a[i]),find(b[i])]:=max+1;
end;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (i<>j)and(i<>k)and(j<>k) then
begin
g:=d[i,k]+d[k,j];
if (d[i,j]>g)and(d[i,k]<max)and(d[k,j]<max) then d[i,j]:=g;
if (d[i,j]=max+1)and
(((d[i,k]=max)and(d[k,j]<=max))or
((d[i,k]<=max)and(d[k,j]=max))) then d[i,j]:=max;
end;
s:=e[1]; k:=d[1,h];
for i:=2 to n do
if (i<>h) then
if (d[i,h]>k)or((d[i,h]=k)and(e[i]<s)) then
begin
k:=d[i,h]; s:=e[i];
end;
if (k=max) then k:=-1;
if (k=max+1) then k:=-2;
writeln(s,' ',k);
end.
这个语句只能转换单个字符,所以数据大于9就出错了。
把语句改为:
str(n,s);
f:=f+a[i]+' '+s+' ';
这样就能AC了!!