c++将无向图的邻接矩阵转为对应邻接表,写一段完整代码
时间: 2024-02-25 11:58:30 浏览: 135
好的,请看下面的 C++ 代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100; //最大顶点数
vector<int> adj[MAXN+1]; //邻接表
void matrix2list(int n, bool G[][MAXN]) { //n为顶点数,G为邻接矩阵
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(G[i][j]) { //如果i与j有边
adj[i].push_back(j); //将j插入i的邻接表
adj[j].push_back(i); //将i插入j的邻接表
}
}
}
}
int main() {
int n, m; //n为顶点数,m为边数
bool G[MAXN+1][MAXN+1] = {0}; //邻接矩阵
cin >> n >> m;
for(int i=1; i<=m; i++) {
int u, v;
cin >> u >> v;
G[u][v] = G[v][u] = true; //无向图的邻接矩阵是对称的
}
matrix2list(n, G); //将邻接矩阵转换为邻接表
for(int i=1; i<=n; i++) { //输出邻接表
cout << i << ": ";
for(int j=0; j<adj[i].size(); j++) {
cout << adj[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,`matrix2list` 函数用于将邻接矩阵转换为邻接表,`adj` 数组即为邻接表。主函数中先输入顶点数和边数,再输入每条边的两个端点,然后将邻接矩阵转换为邻接表,最后输出邻接表。
阅读全文