题解 | 连通图

from collections import deque
class Node:
    def __init__(self,elem:int):
        self.elem=elem
        self.next=None
    def add_next(self,next_elem:'Node'):
        self.next=next_elem
    def return_elem(self):
        return self.elem
    def return_next(self):
        return self.next




class graph:
    def __init__(self,n:int,m:int):
        self.node=n
        self.edge=m
        self.node_set=[]
        for i in range(n):
            self.node_set.append(Node(i+1))
    def add_edge(self,start:int,end:int):
        p=self.node_set[start-1]
        while p.next!=None:
            p=p.next
        p.add_next(Node(end))
    def return_node(self,index):
        return self.node_set[index]



def bfs(graph: graph):
    queue = deque()
    queue.append(graph.return_node(0))
    visited = set()
    visited.add(graph.return_node(0).return_elem())

    while queue:
        current_node = queue.popleft()
        current = current_node
        while current.next != None:
            neighbor = current.next
            if neighbor.return_elem() not in visited:
                visited.add(neighbor.return_elem())
                queue.append(graph.return_node(neighbor.return_elem()-1))
            current = current.next

    return visited



if __name__ == "__main__":
    while True:
        try:
            string=input().split()
            n,m=int(string[0]),int(string[1])
            gra=graph(n,m)
            if m==0 and n==0:
                break
            for i in range(m):
                string = input().split()
                start, end = int(string[0]), int(string[1])
                gra.add_edge(start,end)
            #gra.print_next()
            visited=bfs(gra)
            if len(visited)!=n:
                print("NO")
            else:
                print("YES")
        except EOFError:
            break





全部评论

相关推荐

05-03 12:45
西南大学 Java
nsnzkv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务