| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么这个程序编译不通过?我自己调试过了啊program p1158;
Const
InFile = 'input.txt';
OutFile = 'output.txt';
Limit = 300;
LimitTime = 410;
Type
Tdata = array[1..Limit , 1..Limit] of integer;
Tjunction = array[1..Limit] of
record
remain , blue , purple : integer;
end;
Tshortest = array[1..Limit] of
record
shortest , father : integer;
end;
Tvisited = array[1..Limit] of boolean;
Tpath = record
total : integer;
data : array[1..Limit] of integer;
end;
Var
data : Tdata;
junction : Tjunction;
shortest : Tshortest;
visited : Tvisited;
// path : Tpath;
N , start ,
stop ,
M : integer;
procedure init;
var
i , p1 , p2 ,
t : integer;
initial : char;
begin
fillchar(data , sizeof(data) , $FF);
assign(INPUT , InFile); ReSet(INPUT);
readln(start , stop);
readln(N , M);
for i := 1 to N do
with junction[i] do
begin
readln(initial , remain , blue , purple);
if initial = 'B' then
inc(remain , purple);
end;
for i := 1 to M do
begin
read(p1 , p2 , t);
data[p1 , p2] := t;
data[p2 , p1] := t;
end;
Close(INPUT);
end;
function waittime(source , target , time : integer) : integer;
var
ans ,
add1 , add2 ,
modnum1 ,
modnum2 : integer;
begin
ans := 0;
add1 := time - junction[source].remain + (junction[source].blue + junction[source].purple) * 2;
add2 := time - junction[target].remain + (junction[target].blue + junction[target].purple) * 2;
modnum1 := junction[source].blue + junction[source].purple;
modnum2 := junction[target].blue + junction[target].purple;
while ans <= LimitTime do
if ((ans + add1) mod modnum1 < junction[source].blue) = ((ans + add2) mod modnum2 < junction[target].blue) then
begin
waittime := ans;
exit;
end
else
inc(ans);
waittime := -maxlongint;
end;
procedure work;
var
i , min ,
tmp : integer;
begin
fillchar(shortest , sizeof(shortest) , $FF);
fillchar(visited , sizeof(visited) , 0);
shortest[start].shortest := 0; shortest[start].father := 0;
while not visited[stop] do
begin
min := 0;
for i := 1 to N do
if not visited[i] and (shortest[i].shortest >= 0) then
if (min = 0) or (shortest[i].shortest < shortest[min].shortest) then
min := i;
if min = 0 then
break;
visited[min] := true;
for i := 1 to N do
if not visited[i] and (data[min , i] >= 0) then
begin
tmp := waittime(min , i , shortest[min].shortest) + shortest[min].shortest + data[min , i];
if tmp >= 0 then
if (shortest[i].shortest < 0) or (shortest[i].shortest > tmp) then
begin
shortest[i].shortest := tmp;
shortest[i].father := min;
end;
end;
end;
end;
procedure print;
//var
// p : integer;
begin
assign(OUTPUT , OutFile); ReWrite(OUTPUT);
if visited[stop] then
// begin
writeln(shortest[stop].shortest)
// path.total := 0;
// p := stop;
// while p <> start do
// begin
// inc(path.total);
// path.data[path.total] := p;
// p := shortest[p].father;
// end;
// write(start);
// for p := path.total downto 1 do
// write(' ' , path.data[p]);
// writeln;
// end
else
writeln(0);
Close(OUTPUT);
end;
Begin
init;
work;
print;
End.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator