【图论】【搜索】【DFS】邻接矩阵+pascal实现模板

var w:array[1..1000,1..1000] of integer;
    vis:array[1..1000] of boolean; 
    step:array[1..1000] of integer; //路径
    tot_r,tot_w,t1,t2,t3,n,m,i:integer;
procedure print(k:integer);
var i:integer;
begin
    for i:=1 to k do write(step[i],' ');
    writeln(' ',tot_w);
end;
procedure dfs(u,k:integer);
var     i:integer;
begin
    if u=n then begin inc(tot_r); print(k); exit; end;
    for i:=1 to n do begin
        if (w[u,i]<>0) and not vis[i] then begin
            vis[i]:=true;
            tot_w:=tot_w+w[u,i];
            step[k+1]:=i;
            dfs(i,k+1);
            vis[i]:=false;
            tot_w:=tot_w-w[u,i];
        end;
    end;
end;
begin
    fillchar(w,sizeof(w),0);
    fillchar(vis,sizeof(vis),false); //false未访问
    tot_r:=0;tot_w:=0;
    readln(n,m);
    for i:=1 to m do begin
        readln(t1,t2,t3);
        w[t1,t2]:=t3;
        w[t2,t1]:=t3;
    end;
    step[1]:=1;
    vis[1]:=true;
    dfs(1,1);
    writeln(tot_r);
end.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值