请编写程序创建一个有向图。有向图中包含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 20:35:00 浏览: 148
以下是使用邻接表表示有向图,并按照题目要求输出每个顶点引出的边的程序实现:
```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, num_vertices):
self.num_vertices = num_vertices
self.adj_list = [[] for _ in range(num_vertices)]
def add_edge(self, start_vertex, end_vertex):
self.adj_list[start_vertex].append(end_vertex)
```
这里使用邻接表来存储图。在初始化时,我们创建一个大小为`num_vertices`的列表,每个元素都是空的列表,表示每个节点的邻居节点。`add_edge`方法用于添加一条由`start_vertex`指向`end_vertex`的边,我们只需要在`start_vertex`的邻居列表中添加`end_vertex`即可。
阅读全文