用C++生成一段关于图的邻接矩阵的程序且可以存储边上带权值的图
时间: 2024-03-06 17:46:56 浏览: 102
wuxiangtu.zip_visual c_矩阵生成图
以下是使用 C++ 生成邻接矩阵的程序,可以存储边上带权值的图:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
int n, m; // n个顶点,m条边
int G[MAXN][MAXN]; // 邻接矩阵
int vis[MAXN]; // 标记数组,用于 DFS、BFS 等算法中
int dist[MAXN]; // 存储源点到各个顶点的最短距离,用于 Dijkstra 算法中
struct Edge {
int from, to, weight;
Edge(int _from, int _to, int _weight) : from(_from), to(_to), weight(_weight) {}
};
vector<Edge> edges; // 存储边的数组
void add_edge(int from, int to, int weight) {
edges.emplace_back(from, to, weight);
}
void create_graph() {
cin >> n >> m;
memset(G, INF, sizeof(G));
for (int i = 1; i <= n; i++) {
G[i][i] = 0;
}
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
add_edge(u, v, w);
add_edge(v, u, w); // 无向图需要加上反向边
G[u][v] = w;
G[v][u] = w; // 无向图需要在邻接矩阵中加上反向边
}
}
int main() {
create_graph();
// 输出邻接矩阵
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
cout << G[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在这个程序中,我们使用了 C++ 的 STL 容器 vector 来存储边,使用了 memset 函数来初始化邻接矩阵,并且在邻接矩阵中存储了边的权值。为了方便输出邻接矩阵,我们使用了两层循环来遍历邻接矩阵中的所有元素,并输出它们的值。
阅读全文