【手撕代码】寻找关联关系中所有独立子图的数量

题目描述:给定图g里所有节点V={vi,i=1,2,...,n},以及节点之间的关联E={{vi,vj}...},假设所有有关联关系的节点能连在一起成为一个独立子图,求g中所有独立子图的数量。

样例:输入V = ['v1','v2','v3','v4'],E = [['v1','v2'],['v3','v4']],输出2。

思路:图的深度优先遍历

def dfs(source):
    global visited, E
    stack = [source]      
    while stack:            
        current = stack.pop(0)       
        if not visited[current]:   
            visited[current] = True 
        for relation in E: 
            if current in relation:  
                if relation[0] == current and not visited[relation[1]]:
                    stack.append(relation[1])
                elif relation[1] == current and not visited[relation[0]]:
                    stack.append(relation[0])


V = ['v1','v2','v3','v4']
#E = [['v1','v2'],['v3','v4'],['v1','v3']]
E = [['v1','v2'],['v3','v4']]
visited = {}
for k in V:
    visited[k] = False
count = 0
for k in V:
    if not visited[k]:
        count += 1
        dfs(k)
print(count)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值