输入一组顶点,建立无向图的邻接矩阵的c++代码
时间: 2024-01-02 20:41:31 浏览: 65
以下是建立无向图邻接矩阵的C++代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n; // 顶点数
cin >> n;
vector<vector<int>> graph(n, vector<int>(n, 0)); // 初始化邻接矩阵
int m; // 边数
cin >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u][v] = graph[v][u] = 1; // 更新邻接矩阵
}
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << graph[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,输入首先是顶点数n,然后是边数m,接下来m行每行两个整数表示一条边的两个顶点。最后输出邻接矩阵。
相关问题
设已给出具有n个顶点无向图的邻接表,要求设计算法将邻接表转换为邻接矩阵c++
可以使用一个二维数组来表示邻接矩阵,其中数组的行和列分别对应图中的节点。数组的值为1表示对应节点之间有边,为0表示没有边。
下面是一个示例的C++代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100;
vector<int> adj[MAXN]; // 邻接表
int matrix[MAXN][MAXN]; // 邻接矩阵
int main() {
int n; // 图的节点数
cin >> n;
// 读入邻接表
for (int i = 0; i < n; i++) {
int m; // 当前节点的邻居数
cin >> m;
for (int j = 0; j < m; j++) {
int v; // 邻居节点的编号
cin >> v;
adj[i].push_back(v);
}
}
// 转换为邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = 0;
}
for (int j = 0; j < adj[i].size(); j++) {
int v = adj[i][j];
matrix[i][v] = 1;
}
}
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在上面的代码中,我们首先使用一个vector数组来存储邻接表,读入每个节点的邻居节点,然后使用一个二维数组来表示邻接矩阵。接着,我们遍历每个节点,将其邻居节点在邻接矩阵中标记为1。最后,输出邻接矩阵即可。
c++无向图邻接矩阵
在C++中,无向图(Undirected Graph)可以通过邻接矩阵(Adjacency Matrix)来表示。邻接矩阵是一个二维数组,其中的每个元素表示两个顶点之间是否存在边。如果顶点i和顶点j之间有边,矩阵中的[i][j]或[j][i](因为无向图是双向的)会有一个非零值,通常是1或其他非零标识;如果没有边,则对应位置的值为0。
邻接矩阵的主要优点是空间效率较高,适用于稠密图(边的数量接近于顶点数量的平方),查询任意两个顶点间是否有边的时间复杂度是O(1)。然而,对于稀疏图(边的数量远小于顶点数量的平方),邻接矩阵可能会浪费大量空间,因为大部分元素都是0。
邻接矩阵的实现步骤如下:
1. 定义一个二维数组,其大小为顶点数的平方,用于存储边的信息。
2. 初始化数组,例如使用整型数组并初始化为0,表示初始时没有边。
3. 当添加边时,更新对应位置的值。如果是无向图,需要同时更新[i][j]和[j][i]。
4. 查询边的存在时,只需检查[i][j]或[j][i]是否非零。
阅读全文