2012年分区联赛普级组第四题 …

2012年分区联赛普级组第四题 <wbr>文化之旅 

2012年分区联赛普级组第四题 <wbr>文化之旅 
2012年分区联赛普级组第四题 <wbr>文化之旅



解题思路:先读入数据,然后用二维数组建一个图,用Dijkstra算法,求最短路,如果有答案就输出,不然就输出-1


程序:

const

  maxn=100;

var

  a,b:array[1..maxn,1..maxn] of longint;

  v:array[1..maxn] of boolean;

  d,f,pre:array[1..maxn] of longint;

  m,k,s,e,i,j,x,y,z,n:longint;


function hehe(x,y:longint):boolean;

  begin

    hehe:=true;

    while x<>0 do

      begin

        if (f[x]=y)or(b[y,f[x]]=1) then exit(false);

        x:=pre[x];

      end;

end;


procedure dij;

  var

    min,i,u:longint;

  begin

    repeat

      min:=maxlongint;

      u:=0;

      for i:=1 to n do

        if (d[i]

      if u>0 then

        begin

          v[u]:=false;

          for i:=1 to n do

            if (v[i])and(d[u]+a[u,i]

              begin

                d[i]:=d[u]+a[u,i];

                pre[i]:=u;

              end;

        end;

    until u=0;

end;


begin

  readln(n,m,k,s,e);

  for i:=1 to n do

    read(f[i]);

  for i:=1 to m do

    for j:=1 to m do

      read(b[i,j]);

  for i:=1 to n do

    for j:=1 to n do

      a[i,j]:=maxlongint div 3;

  for i:=1 to k do

    begin

      readln(x,y,z);

      if (b[f[y],f[x]]=0)and(a[x,y]>z) then begin a[x,y]:=z; a[y,x]:=z; end;

    end;

  for i:=1 to n do

    d[i]:=maxlongint div 3;

  d[s]:=0;

  fillchar(v,sizeof(v),true);

  dij;

  if d[e]

end.


版权属于: Chris

原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v60m.html

转载时必须以链接形式注明原始出处及本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值