请编写程序创建一个有向图。有向图中包含n个顶点,编号为0至n-1。 输入格式: 输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过20000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。 输出格式: 按顶点编号递增顺序输出每个顶点引出的边,每个顶点占一行,若某顶点没有引出边,则不输出。每行表示一个顶点引出的所有边,格式为a:(a,b,w)……,表示有向边a->b的权值为w,a引出的多条边按编号b的递增序排列。
时间: 2024-03-27 15:35:00 浏览: 170
以下是使用邻接表表示有向图,并按照题目要求输出每个顶点引出的边的程序实现:
```python
from collections import defaultdict
n, e = map(int, input().split())
# 初始化邻接表
graph = defaultdict(list)
# 构建邻接表
for i in range(e):
a, b, c = map(int, input().split())
graph[a].append((b, c))
# 按顶点编号递增顺序输出每个顶点引出的边
for i in range(n):
if i in graph:
edges = sorted(graph[i], key=lambda x: x[0]) # 根据边的目标节点编号排序
output = [f"{i}:"] + [f"({a},{b})" for a, b in edges]
print(" ".join(output))
```
其中,使用`defaultdict(list)`初始化一个空的邻接表。`graph[a].append((b, c))`表示将边`(a, b, c)`加入邻接表中。最后按照题目要求输出每个顶点的引出边,如果某个顶点没有引出边,则不输出。
相关问题
请编写程序创建一个有向图。有向图中包含n个顶点,编号为0至n-1。 输入格式: 输入
你好,下面是一个简单的Python程序,用于创建一个有向图并输出它的邻接列表表示:
```python
class DirectedGraph:
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.adjacency_list = {i: [] for i in range(num_vertices)}
def add_edge(self, start, end):
if start < self.num_vertices and end < self.num_vertices:
self.adjacency_list[start].append(end)
def print_graph(self):
for vertex in self.adjacency_list:
print(f"{vertex} -> {self.adjacency_list[vertex]}")
# 例子: 创建一个有向图
if __name__ == "__main__":
num_vertices = 5
graph = DirectedGraph(num_vertices)
graph.add_edge(0, 1)
graph.add_edge(1, 2)
graph.add_edge(2, 3)
graph.add_edge(3, 4)
graph.add_edge(4, 0)
# 输出图的邻接列表表示
graph.print_graph()
```
在这个例子中,我们创建了一个有5个顶点的有向图,并添加了一些边。程序输出了这个图的邻接列表表示,即每个顶点以及与其相连的顶点的列表。你可以根据自己的需求来改变顶点的数量、添加更多的边等。希望这个程序可以帮到你。
请编写程序创建一个有向图。有向图中包含n个顶点,编号为0至n-1。
以下是一个使用邻接表表示的有向图的Python实现:
```python
class DirectedGraph:
def __init__(self, n):
self.n = n
self.adj_list = [[] for _ in range(n)]
def add_edge(self, u, v):
self.adj_list[u].append(v)
def remove_edge(self, u, v):
self.adj_list[u].remove(v)
def has_edge(self, u, v):
return v in self.adj_list[u]
```
在这个实现中,我们使用了一个邻接表来表示有向图,其中adj_list[i]存储从顶点i出发的所有边的目标顶点编号。我们的有向图类具有以下三个方法:
- add_edge(u, v):在顶点u和v之间添加一条有向边。
- remove_edge(u, v):从顶点u和v之间移除一条有向边。
- has_edge(u, v):检查是否存在从顶点u到v的有向边。
阅读全文