我下载了一段关于过河问题的pascal源代码,怎么调试也不成功,那位高人为我调试一下?高分相赠Unit Dijkstra;
{$X+,S-}
{$M 16384,16384,655360}
interface
const
    MaxVectexNum = 150;
    MaxDistance  = 10000;
type
    TRange  = 1..MaxVectexNum ;
    TVectexName = Integer ;
    TWeight = Integer ;    TVectex = Array [TRange] of TVectexName ;
    TEdge   = Array [TRange,TRange] of TWeight;
    TDistance = Array [TRange] of TWeight;
    TSetOfVectex  = Set of TRange;
var
    vectex,preVectexPos : TVectex;
    dist : TDistance;
    edge : TEdge;
    setOfVectex : TSetOfVectex;
    beginVectexPos : Integer;
    vectexNum  : Integer;
    minDist,distTemp: TWeight;
    inFileName , outFileName : String ;
    inFile , outFile : Text ;
procedure About;
procedure ReadData;
procedure PrintPath;
procedure Dijk;
implementationprocedure About;
begin
    writeln;
    writeln('{*****************************************}');
end;procedure ReadData;
var i , j :Integer ;
begin
    write('Input the input data file name: ');
    readln(inFileName);
    assign(inFile,inFileName);
    reset(inFile);
    read(inFile,vectexNum);
    if (vectexNum < 1) or (vectexNum > MaxVectexNum)
    then
    begin
        writeln('The count of vectex is out of range!');
        exit;
    end
    else
    begin
        for i := 1 to vectexNum do vectex[i] := i; { Init vectex[]  }
        for i := 1 to vectexNum do                 { Init edge[,] }
            for j := 1 to vectexNum do
                if i = j then  edge[ vectex[i],vectex[j] ] := 0
                         else  edge[ vectex[i],vectex[j] ] := MaxDistance;
        repeat
            read(inFile,i,j,edge[ vectex[i],vectex[j] ]);
            edge[vectex[j],vectex[i]] :=
            edge[ vectex[i],vectex[j]];    {  No dection graph }
        until ( eof(inFile));
        close(inFile);
    end ;
end ;procedure PrintPath;
var
    i : Integer ;
procedure PrintSinglePath( beginVertexPos : Integer ; endVertexPos : Integer );
begin
    if preVectexPos[ endVertexPos ] = beginVertexPos
    then
    begin
        write(outFile,beginVertexPos);
    end
    else
    begin
        PrintSinglePath( beginVertexPos , preVectexPos[ endVertexPos ] );
    end;
    write(outFile,'-->');
    write(outFile,endVertexPos);
end;
{PrintPath}
begin
    write('Input the output data file name:');
    readln(outFileName);
    assign(outFile,outFileName);
    rewrite(outFile);
    writeln(outFile,'Shortest Path By DijkStra ');
    for i:= 1 to vectexNum do
    begin
        write(outFile,'d(',vectex[beginVectexPos]:2,',',vectex[i]:2,')=');
        if dist[vectex[i]] < MaxDistance
        then
        begin
            write(outFile,dist[vectex[i]]:7);
            write(outFile,'':2,' path: ');
            PrintSinglePath(beginVectexPos , i);
            writeln( outFile );
        end
        else
        begin
            write(outFile ,'  +',Chr(236),'':3);
            writeln(outFile,'':2,' No path ! ');
        end ;
   end;
   close(outFile);
end;procedure Dijk;
var
    i , j , nextI : Integer;
    count : Integer ;
begin
    {write('Input the begin vectex postion:');
    readln(beginVectexPos);}
    beginVectexPos := 1; 
    setOfVectex := [];    for i:=1 to vectexNum do
    begin
        setOfVectex := setOfVectex+[ vectex[i] ];
        dist[vectex[i]] := edge[ vectex[i],vectex[beginVectexPos] ];
        preVectexPos[i] := beginVectexPos;
    end;    i := beginVectexPos;
    count := 1;
    setOfVectex:= setOfVectex-[ vectex[i] ];    repeat
        minDist := MaxDistance;
        for j := 1 to vectexNum do
        begin
            if vectex[j] in setOfVectex
            then
            begin
                distTemp := dist[vectex[i]]+edge[vectex[i],vectex[j]];
                if( (dist[vectex[j]] > distTemp ))
                and ( edge[vectex[i],vectex[j]] < MaxDistance )
                then
                begin
                    dist[vectex[j]] := distTemp;
                    preVectexPos[j] := i;
                end;
                if (dist[vectex[j]]>0) and (dist[vectex[j]]<minDist) then
                begin
                    minDist := dist[vectex[j]];
                    nextI := j;
                end;
            end;
        end;        if minDist<>MaxDistance then dist[vectex[nexti]] := minDist;
        i := nextI;
        inc( count );
        setOfVectex := setOfVectex-[vectex[i]];
    until ( count = vectexNum ) ;
end;end.