Hole

来源:互联网 发布:js中的unshift 编辑:程序博客网 时间:2024/04/30 16:10
varn,m:integer;g:array[1..150,1..150] of integer;v,mv:integer;best:array [1..150,0..1] of double;{dijkstra}i,j,p1,p2:integer;nmin:real;min:array [1..150,0..1] of double;vis:array [1..150,0..1] of boolean;procedure debugmin;var i,j:integer;beginfor i:=0 to 1 dobeginfor j:=1 to 4 dobeginwrite(min[j,i]:5:0);write('':5);end;writeln;end;writeln;end;procedure outp;beginassign(output,'output.txt');rewrite(output);writeln(best[n,1]:0:2);close(output);end;procedure dijkstra;beginfillchar(vis,sizeof(vis),false);vis[1,0]:=true;vis[1,1]:=true;for i:=2 to n dobeginif g[1,i]<>0 thenbeginmin[i,0]:=g[1,i]/v;min[i,1]:=g[1,i]/mv;endelsebeginmin[i,0]:=1e10;min[i,1]:=1e10;end;end;debugmin;while vis[n,1]=false dobeginnmin:=1e10;for i:=0 to 1 dobeginfor j:=1 to n dobeginif not vis[j,i] and (min[j,i]<nmin) thenbeginnmin:=min[j,i];p1:=i;p2:=j;end;{end of if}end;{end of for}{选出最短的路径,并记录p1,p2}end;vis[p2,p1]:=true;best[p2,p1]:=nmin;writeln('choose:  ',p2,p1);if p1=0 thenbeginfor i:=1 to n dobeginif not vis[i,0] and (min[i,0]>min[p2,0]+g[p2,i]/v)and (g[p2,i]<>0) thenbeginmin[i,0]:=min[p2,0]+g[p2,i]/v;debugmin;end;{end of if}end;for i:=1 to n dobeginif not vis[i,1] and (min[i,1]>min[p2,0]+g[p2,i]/mv)and (g[p2,i]<>0) thenbeginmin[i,1]:=min[p2,0]+g[p2,i]/mv;debugmin;end;{end of if}end;end{end of if}{更新未加速的路径}elsebeginfor i:=1 to n dobeginif not vis[i,1] and (min[i,1]>min[p2,1]+g[p2,i]/v)and (g[p2,i]<>0) thenbeginmin[i,1]:=min[p2,1]+g[p2,i]/v;debugmin;end;end;{end of for}end;{end of else}end;{end of while}end;procedure init;var i:integer;t1,t2,t3:integer;beginassign(input,'hole.txt');reset(input);fillchar(g,sizeof(g),0);read(n,m);for i:=1 to m dobeginread(t1,t2,t3);if(g[t1,t2]=0) or (g[t1,t2]>t3) thenbeging[t1,t2]:=t3;g[t2,t1]:=t3;end;end;read(v,mv);end;{main}begininit;dijkstra;outp;end.

原创粉丝点击