求连通分量

本文介绍了一个求解无向图中连通分量数量的算法实现,通过深度优先搜索遍历图中的每个节点来确定连通分量的最大数量。示例输入包括节点数、边数及连接关系,输出则为最大连通分量的数量。
  • 求连通分量

    Time Limit:1000MS  Memory Limit:65536K Total Submit:233 Accepted:132

    Description

    求一个图的连通分量

    Input

    n 顶点数(<=100) 边

    Output

    连通分量

    Sample Input

    5
    1 2
    3 4
    2 3
    0 0
    

    Sample Output

    4
  • var
     map:array[0..1001,0..1001]of longint;
     a,b,dis:array[0..1001]of longint;
     i,j,n,s,ans,max,la1,la2:longint;
    procedure dp(dep:longint);
    var
     i:longint;
    begin
     for i:=1 to n do
      if dis[i]=0 then
       if map[dep,i]<>0 then
        begin
         dis[i]:=1;
         inc(max);
         dp(i);
        end;
    end;
    
    begin
     la1:=1;
     la2:=1;
     readln(n);
     while (la1<>0)and(la2<>0) do//因为是以零结束,所以用while读入
      begin
       inc(i);
       read(la1,la2);
       if (la1<>0)and(la2<>0) then
        begin
         a[i]:=la1;
         b[i]:=la2;
        end;
       readln;
      end;
     s:=i-1;//因为会把零的那次算上,所以要减一
     for i:=1 to s do
      begin
       la1:=a[i];
       la2:=b[i];
       map[la1,la2]:=1;
       map[la2,la1]:=1;
      end;
  • {建立一个dp的表,用dp}
  •  for i:=1 to n do
      begin
       max:=0;
       dp(i);
       if ans<max then ans:=max;
      end;
     write(ans);
    end.
    
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值