cpp从文件中读取字符串提取成邻接矩阵
时间: 2023-12-10 14:04:41 浏览: 111
假设文件中的字符串格式如下:
```
4 5
0 1 2
0 3 1
1 2 3
2 3 4
```
其中第一行表示有4个节点和5条边,接下来的每一行表示一条边,第一列是起点,第二列是终点,第三列是边的权重。现在我们要将这个数据转换成邻接矩阵的形式。
邻接矩阵是一个二维数组,其中数组的每个元素表示两个节点之间是否有一条边。我们可以先创建一个二维数组,初始化为0,然后再遍历文件中的每一条边,将对应的邻接矩阵元素设为边的权重即可。
代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
ifstream infile("input.txt"); // 打开文件
int n, m;
infile >> n >> m; // 读取节点数和边数
vector<vector<int>> adj_matrix(n, vector<int>(n, 0)); // 初始化邻接矩阵
for (int i = 0; i < m; i++) {
int u, v, w;
infile >> u >> v >> w; // 读取边的起点、终点和权重
adj_matrix[u][v] = w; // 将对应的邻接矩阵元素设为边的权重
adj_matrix[v][u] = w; // 无向图需要将两个方向都设为同样的权重
}
infile.close(); // 关闭文件
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << adj_matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
输出:
```
0 2 0 1
2 0 3 0
0 3 0 4
1 0 4 0
```
注意,这个示例只适用于无向图,如果是有向图,则只需要将邻接矩阵中的一条边设为对应的权重即可。如果是有权图,则需要根据具体情况修改代码。
阅读全文