【NOIP2012】第二题·文化之旅

深度优先与Floyd算法解析
本文通过两个示例详细介绍了深度优先搜索(DFS)和Floyd算法的实现过程及应用,包括输入输出文件的设置、变量声明、算法流程等,并针对特定场景进行了算法优化。
深度优先搜索(90分)
var n,m,k,S,T,i,j,u,v,d,now,res:longint; c,vt,vc:array[0..100]of longint; a,dist:array[0..100,0..100]of longint; procedure DFS(i:longint); var j:longint; begin if i=T then begin res:=now; exit; end; for j:=1 to n do if (dist[i,j]<>0)and(a[c[j],c[i]]=0)and(vt[j]=0)and(vc[c[j]]=0)and(now+dist[i,j]<res) then begin inc(now,dist[i,j]); vt[j]:=1; vc[c[j]]:=1; DFS(j); dec(now,dist[i,j]); vt[j]:=0; vc[c[j]]:=0; end; end; begin assign(input,'culture.in'); reset(input); assign(output,'culture.out'); rewrite(output); read(n,k,m,S,T); for i:=1 to n do read(c[i]); for i:=1 to k do for j:=1 to k do read(a[i,j]); for i:=1 to m do begin read(u,v,d); dist[u,v]:=d; dist[u,v]:=d; end; res:=maxlongint; vt[S]:=1; vc[c[S]]:=1; DFS(S); if res=maxlongint then writeln(-1) else writeln(res); close(input); close(output); end.

FOLYD算法
const
    INF=1000000;
var
    n,k,m,s,t,i,j,q,u,v,d:longint;
    a,dist:array[1..110,1..110] of longint;
    c:array[1..110] of longint;
begin
    assign(input,'culture.in'); reset(input);
    assign(output,'culture.out'); rewrite(output);
    readln(n,k,m,s,t);
    for i:=1 to n do
        for j:=1 to n do dist[i,j]:=INF;

    for i:=1 to n do read(c[i]);
    for i:=1 to k do
        for j:=1 to k do
            read(a[i,j]);
    for i:=1 to m do
    begin
        readln(u,v,d);
        if a[c[v],c[u]]=0 then dist[u,v]:=d;
        if a[c[u],c[v]]=0 then dist[v,u]:=d;
    end;


    for k:=1 to n do
        for i:=1 to n do
            for j:=1 to n do
                if dist[i,k]+dist[k,j]<dist[i,j] then  dist[i,j]:=dist[i,k]+dist[k,j];

    if dist[s,t]<INF then writeln(dist[s,t]) else writeln(-1);
    close(input); close(output);
end.

 

 

转载于:https://www.cnblogs.com/kairos2000/p/4783316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值