沈阳网站推广优化东莞网站推广渠道
105. 有向图的完全联通
题目描述
给定一个有向图,包含 N 个节点,节点编号分别为 1,2,...,N。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。
输入描述
第一行包含两个正整数,表示节点数量 N 和边的数量 K。 后续 K 行,每行两个正整数 s 和 t,表示从 s 节点有一条边单向连接到 t 节点。
输出描述
如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。
输入示例
4 4
1 2
2 1
1 3
2 4
输出示例
1
提示信息
从 1 号节点可以到达任意节点,输出 1。
数据范围:
1 <= N <= 100;
1 <= K <= 2000。
DFS实现
import collections
def dfs_search(startIndex, n, edges, visited):visited[startIndex] = Trueis_all_visited = Truefor i in range(1, n+1):if not visited[i]:is_all_visited = Falseif is_all_visited:returnfor next_index in edges[startIndex]:if not visited[next_index]:dfs_search(next_index, n, edges, visited)if __name__ == '__main__':n, k = map(int, input().split())edges = collections.defaultdict(list)for _ in range(k):s, t= map(int, input().split())edges[s].append(t)visited = [False] * (n + 1)dfs_search(1, n, edges, visited)isAllVisited = Truefor i in range(1, n + 1):if not visited[i]:isAllVisited = Falseif isAllVisited:print(1)else:print(-1)
BFS实现
import collections
def bfs_search(edges, visited):startIndex = 1visited[startIndex] = Trueque = collections.deque([startIndex])while que:cur = que.popleft()for next_index in edges[cur]:if not visited[next_index]:visited[next_index] = Trueque.append(next_index)if __name__ == '__main__':n, k = map(int, input().split())edges = collections.defaultdict(list)for _ in range(k):s, t= map(int, input().split())edges[s].append(t)visited = [False] * (n + 1)bfs_search(edges, visited)isAllVisited = Truefor i in range(1, n + 1):if not visited[i]:isAllVisited = Falseif isAllVisited:print(1)else:print(-1)