键盘输入数据,建立一个有向图的邻接表的代码
时间: 2024-02-11 14:08:33 浏览: 26
以下是一个简单的键盘输入数据,建立有向图邻接表的代码。该代码使用了 STL 中的 vector 和 unordered_map 容器。
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n, m;
cin >> n >> m; // n 为节点数,m 为边数
unordered_map<int, vector<int>> graph; // 定义邻接表
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v; // u -> v 有一条有向边
graph[u].push_back(v); // 加入邻接表
}
return 0;
}
```
在这个代码中,我们首先读入节点数 n 和边数 m,然后定义一个 unordered_map 容器 graph,用于存储邻接表。接下来,我们通过循环读入每一条边,将其加入到邻接表中。最后,我们返回 0 表示程序正常结束。
相关问题
) 键盘输入数据,建立一个有向图的邻接表。 (2) 输出该邻接表。 (3) 在有向图的邻接表的基础上计算各顶点的度,并输出
好的,让我来解答你的问题。
首先,让我们来看看如何建立有向图的邻接表。假设输入的数据格式为:
```
5 6
1 2
1 3
2 3
2 4
3 4
4 5
```
其中第一行的两个数字表示顶点数和边数,接下来的每一行表示一条边。
那么我们可以使用 Python 语言来实现建立邻接表的过程,代码如下:
```python
n, m = map(int, input().split())
# 初始化邻接表
adj = [[] for i in range(n)]
# 添加边
for i in range(m):
u, v = map(int, input().split())
adj[u-1].append(v)
# 输出邻接表
for i in range(n):
print(i+1, end=': ')
for j in adj[i]:
print(j, end=' ')
print()
```
接下来,我们来看看如何计算各顶点的度。有向图的度分为出度和入度,出度表示从该顶点出发的边的数目,入度表示指向该顶点的边的数目。
那么我们可以使用以下代码来计算各顶点的度:
```python
# 计算各顶点的出度
out_degree = [len(adj[i]) for i in range(n)]
# 计算各顶点的入度
in_degree = [0] * n
for i in range(n):
for j in adj[i]:
in_degree[j-1] += 1
# 输出各顶点的度
for i in range(n):
print("顶点 %d 的度为:出度 %d,入度 %d" % (i+1, out_degree[i], in_degree[i]))
```
这样,我们就完成了建立有向图的邻接表、输出邻接表和计算各顶点的度的过程。
c语言) 键盘输入数据,建立一个有向图的邻接表。 (2) 输出该邻接表。 (3) 在有向图的邻接表的基础上计算各顶点的度,并输出
好的,让我给你提供一个 C 语言实现的代码,来完成你的要求。
首先,我们假设输入数据的格式如下:
```
5 6
1 2
1 3
2 3
2 4
3 4
4 5
```
其中第一行的两个数字表示顶点数和边数,接下来的每一行表示一条边。
那么我们可以使用 C 语言来实现建立邻接表的过程,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100005
struct Edge {
int v;
struct Edge* next;
};
struct Edge* head[MAXN];
int out_degree[MAXN];
int in_degree[MAXN];
void add_edge(int u, int v) {
struct Edge* p = (struct Edge*) malloc(sizeof(struct Edge));
p->v = v;
p->next = head[u];
head[u] = p;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
// 初始化邻接表
for (int i = 1; i <= n; i++) {
head[i] = NULL;
out_degree[i] = 0;
in_degree[i] = 0;
}
// 添加边
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
add_edge(u, v);
}
// 输出邻接表
for (int i = 1; i <= n; i++) {
printf("%d: ", i);
for (struct Edge* p = head[i]; p != NULL; p = p->next) {
printf("%d ", p->v);
}
printf("\n");
}
// 计算各顶点的度
for (int i = 1; i <= n; i++) {
out_degree[i] = 0;
in_degree[i] = 0;
for (struct Edge* p = head[i]; p != NULL; p = p->next) {
out_degree[i]++;
in_degree[p->v]++;
}
}
// 输出各顶点的度
for (int i = 1; i <= n; i++) {
printf("顶点 %d 的度为:出度 %d,入度 %d\n", i, out_degree[i], in_degree[i]);
}
return 0;
}
```
这样,我们就完成了建立有向图的邻接表、输出邻接表和计算各顶点的度的过程。