c++ 邻接矩阵建图
时间: 2024-05-30 22:06:40 浏览: 18
C++邻接矩阵建图是一种基于矩阵的图存储方法,它是指用一个二维数组来表示一个图。其中,数组的行和列表示图中的各个顶点,数组元素表示相应顶点之间的边或权值。邻接矩阵在空间复杂度上是比较高的,但是在查找两个顶点之间是否存在边的时候比较方便。
具体实现方式如下:
1. 定义一个二维数组,数组元素类型为int,数组大小为N * N,其中N为图中顶点数。
2. 初始化二维数组元素值为0,表示各个顶点之间没有边。
3. 对于每条边(u, v),在二维数组中将(u, v)和(v, u)对应位置的元素值设为1或者边的权值,表示存在一条边。
4. 如果是有向图,只需要在(u, v)对应位置的元素值设为1或者边的权值即可。
相关问题
邻接矩阵建图 acwing
邻接矩阵是一种常见的图表示方法,可以用于建立图的结构。在acwing平台上,您可以使用以下代码来建立邻接矩阵图:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int N = 1005; // 假设图中最多有1005个节点
vector<vector<int>> graph(N, vector<int>(N, 0)); // 初始化邻接矩阵
int main() {
int n, m;
cin >> n >> m; // 输入节点数和边数
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v; // 输入边的起点和终点
// 在邻接矩阵中标记该边
graph[u][v] = 1;
graph[v][u] = 1;
}
// 输出邻接矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << graph[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
这段代码首先定义了一个大小为1005x1005的二维矩阵graph作为邻接矩阵。然后,根据输入的节点数和边数,利用循环读入每条边的起点和终点,并在邻接矩阵中标记该边。最后,通过两个嵌套的循环输出邻接矩阵。
请注意,这只是建立邻接矩阵图的基本示例,您可以根据实际需要进行修改和扩展。
c语言用邻接矩阵建图
C语言可以使用二维数组来实现邻接矩阵建图。具体步骤如下:
1.定义一个二维数组来表示邻接矩阵,数组大小为n*n,其中n为图的顶点数。
2.初始化邻接矩阵,将所有元素都赋值为0。
3.根据图的边信息,将邻接矩阵中对应位置的元素赋值为1或者边的权值。
4.遍历邻接矩阵,输出图的信息。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100
typedef struct {
int vertex[MAX_VERTEX_NUM];
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum, arcnum;
} MGraph;
void CreateMGraph(MGraph *G) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->arcnum);
printf("请输入顶点信息:\n");
for (i = 0; i < G->vexnum; i++) {
scanf("%d", &G->vertex[i]);
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arc[i][j] = 0;
}
}
printf("请输入边的信息:\n");
for (k = 0; k < G->arcnum; k++) {
printf("请输入第%d条边的起点、终点和权值:\n", k + 1);
scanf("%d%d%d", &i, &j, &w);
G->arc[i][j] = w;
G->arc[j][i] = w; // 无向图需要将对称位置也赋值
}
}
void PrintMGraph(MGraph G) {
int i, j;
printf("邻接矩阵为:\n");
for (i = 0; i < G.vexnum; i++) {
for (j = 0; j < G.vexnum; j++) {
printf("%d ", G.arc[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateMGraph(&G);
PrintMGraph(G);
return 0;
}
```