邻接矩阵:建立所给无向带权图的邻接矩阵存储并输出该矩阵
时间: 2023-09-10 10:12:54 浏览: 58
好的,我理解了你的问题。以下是建立无向带权图邻接矩阵的代码示例,你可以参考一下:
```python
# 定义图的顶点数和边数
n = 5 # 顶点数为5
m = 7 # 边数为7
# 初始化邻接矩阵,全部赋值为0
adj_matrix = [[0] * n for i in range(n)]
# 读入每条边的起点、终点和权值,更新邻接矩阵
for i in range(m):
u, v, w = map(int, input().split()) # 读入一条边的信息
adj_matrix[u][v] = w
adj_matrix[v][u] = w # 因为是无向图,所以需要更新两个方向的权值
# 输出邻接矩阵
for i in range(n):
for j in range(n):
print(adj_matrix[i][j], end=' ')
print()
```
以上代码会先读入图的顶点数和边数,然后逐条读入每条边的起点、终点和权值,更新邻接矩阵。最后输出邻接矩阵即可。
注意,这里的邻接矩阵是一个二维数组,其中每个元素表示一条边的权值,如果两个顶点之间没有边相连,则相应的元素值为0。
相关问题
邻接矩阵:建立所给无向带权图的邻接矩阵存储并输出该矩阵(c++注释)
好的,下面是C++代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100;
int n, m; // n表示顶点个数,m表示边数
int A[MAXN][MAXN]; // 邻接矩阵
int main() {
// 输入顶点数和边数
cin >> n >> m;
// 初始化邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = 0;
}
}
// 添加边
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w; // 输入边的起点、终点和权值
A[u][v] = A[v][u] = w; // 设置邻接矩阵中对应的元素
}
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,邻接矩阵A的第i行第j列的元素表示顶点i和j之间的边的权值,如果没有边,则为0。由于该图是无向图,因此邻接矩阵是对称的。
满足邻接矩阵:建立所给无向带权图的邻接矩阵存储并输出该矩阵。 邻接表:建立所给无向图的邻接表
好的,我可以回答你的问题。首先是邻接矩阵的问题:
假设给定的无向带权图有 $n$ 个顶点,那么我们可以用一个 $n\times n$ 的矩阵 $M$ 来表示它的邻接矩阵。其中 $M_{i,j}$ 表示顶点 $i$ 和顶点 $j$ 之间的边权值,如果它们之间没有边相连,那么 $M_{i,j}$ 就为无穷大。下面是一个示例代码:
```python
n = 5 # 假设有5个顶点
edges = [(0, 1, 2), (0, 2, 1), (1, 2, 3), (1, 3, 4), (2, 3, 5), (2, 4, 4), (3, 4, 6)] # 给出边的信息
INF = float('inf') # 用一个极大值表示两个顶点之间没有边
# 初始化邻接矩阵
M = [[INF] * n for _ in range(n)]
# 填充邻接矩阵
for i, j, w in edges:
M[i][j] = M[j][i] = w
# 输出邻接矩阵
for i in range(n):
for j in range(n):
if M[i][j] == INF:
print('{:>5}'.format('INF'), end='')
else:
print('{:>5}'.format(M[i][j]), end='')
print()
```
接下来是邻接表的问题:
邻接表是一种更为紧凑的图表示方法,对于每个顶点,我们用一个链表或数组存储与之相邻的顶点。具体来说,我们可以用一个长度为 $n$ 的数组 $A$ 来表示整个图的邻接表,其中 $A[i]$ 存储顶点 $i$ 的邻接表。邻接表中每个元素可以是一个链表或数组,存储与该顶点相邻的顶点。下面是一个示例代码:
```python
n = 5 # 假设有5个顶点
edges = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (2, 4), (3, 4)] # 给出边的信息
# 初始化邻接表
A = [[] for _ in range(n)]
# 填充邻接表
for i, j in edges:
A[i].append(j)
A[j].append(i)
# 输出邻接表
for i in range(n):
print('{}: {}'.format(i, A[i]))
```
注意,上述代码中邻接表中的元素是一个列表,存储与该顶点相邻的顶点编号。如果要存储带权图,可以将列表中的元素改为元组,第一个元素表示相邻的顶点编号,第二个元素表示边权值。