| ||||||||||
| 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 | |||||||||
Re:为什么这个程序编译不通过?我自己调试过了啊In Reply To:为什么这个程序编译不通过?我自己调试过了啊 Posted by:wangchen1ren at 2004-04-27 21:29:20 > 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