以邻接矩阵形式创建一个无向图
时间: 2023-10-18 14:18:23 浏览: 39
可以使用二维数组来表示邻接矩阵,其中每个元素表示两个节点之间是否有边相连。对于无向图而言,邻接矩阵应该是对称的,即如果 a[i][j] 为 1,则 a[j][i] 也为 1。
以下是一个创建无向图邻接矩阵的示例代码:
```python
# 定义节点数和边数
n = 5
m = 7
# 初始化邻接矩阵
graph = [[0]*n for _ in range(n)]
# 添加边,注意无向图的邻接矩阵是对称的
edges = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 4), (3, 4), (4, 0)]
for edge in edges:
graph[edge[0]][edge[1]] = 1
graph[edge[1]][edge[0]] = 1
# 打印邻接矩阵
for i in range(n):
for j in range(n):
print(graph[i][j], end=" ")
print()
```
输出结果为:
```
0 1 1 0 1
1 0 1 1 0
1 1 0 0 1
0 1 0 0 1
1 0 1 1 0
```
其中,节点数为 5,边数为 7,邻接矩阵中的 1 表示两个节点之间有边相连,0 则表示没有边相连。
相关问题
C++以邻接矩阵形式创建一个无向图
下面是使用邻接矩阵创建无向图的C++代码示例:
```c++
#include <iostream>
using namespace std;
const int MAX = 100;
class Graph {
private:
int numVertices;
int adjMatrix[MAX][MAX];
public:
Graph(int numVertices) {
this->numVertices = numVertices;
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
adjMatrix[i][j] = 0;
}
}
}
void addEdge(int i, int j) {
adjMatrix[i][j] = 1;
adjMatrix[j][i] = 1;
}
void removeEdge(int i, int j) {
adjMatrix[i][j] = 0;
adjMatrix[j][i] = 0;
}
void printGraph() {
for (int i = 0; i < numVertices; i++) {
cout << "Vertex " << i << " is connected to: ";
for (int j = 0; j < numVertices; j++) {
if (adjMatrix[i][j] == 1) {
cout << j << " ";
}
}
cout << endl;
}
}
};
int main() {
Graph g(5);
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(3, 4);
g.printGraph();
return 0;
}
```
在上面的代码中,我们首先定义了一个Graph类,该类包含两个私有成员变量:numVertices表示图中顶点的数量,adjMatrix是一个二维数组,表示邻接矩阵。接下来,我们定义了构造函数和一些函数来添加和删除边以及打印图。在main函数中,我们创建了一个Graph对象,并添加了一些边。最后,我们打印了整个图的邻接表形式。
c语言,以邻接矩阵形式创建一个无向图
以下是使用邻接矩阵形式创建一个无向图的C代码示例:
```c
#include <stdio.h>
#define MAX_VERTICES 100 // 最大顶点数
int adj_matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
int main() {
int num_vertices, num_edges;
printf("请输入顶点数和边数:");
scanf("%d %d", &num_vertices, &num_edges);
// 将邻接矩阵初始化为0
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
adj_matrix[i][j] = 0;
}
}
// 读入每条边并在邻接矩阵中标记
printf("请输入每条边连接的两个顶点的编号:\n");
for (int i = 0; i < num_edges; i++) {
int u, v;
scanf("%d %d", &u, &v);
adj_matrix[u][v] = adj_matrix[v][u] = 1; // 标记为相邻顶点
}
// 输出邻接矩阵
printf("邻接矩阵为:\n");
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
printf("%d ", adj_matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
使用示例:
```
请输入顶点数和边数:5 7
请输入每条边连接的两个顶点的编号:
0 1
0 2
0 3
1 2
1 4
2 3
3 4
邻接矩阵为:
0 1 1 1 0
1 0 1 0 1
1 1 0 1 0
1 0 1 0 1
0 1 0 1 0
```