给定n个结点的有向图D的邻接矩阵,求出图D的可达矩阵 给出C/C++代码
时间: 2023-09-04 18:15:57 浏览: 74
好的,下面是C++代码实现:
```C++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> get_reachable_matrix(vector<vector<int>> adj_matrix) {
// 获取邻接矩阵大小
int n = adj_matrix.size();
// 初始化可达矩阵为邻接矩阵
vector<vector<int>> reachable_matrix = adj_matrix;
// 进行 n-1 次矩阵乘法运算
for (int i = 1; i < n; i++) {
vector<vector<int>> temp(n, vector<int>(n, 0));
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
for (int l = 0; l < n; l++) {
temp[j][k] += reachable_matrix[j][l] * adj_matrix[l][k];
}
}
}
reachable_matrix = temp;
}
// 返回可达矩阵
return reachable_matrix;
}
int main() {
vector<vector<int>> adj_matrix = {{0, 1, 0}, {0, 0, 1}, {1, 0, 0}};
vector<vector<int>> reachable_matrix = get_reachable_matrix(adj_matrix);
// 输出可达矩阵
for (int i = 0; i < reachable_matrix.size(); i++) {
for (int j = 0; j < reachable_matrix.size(); j++) {
cout << reachable_matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
使用时,只需要传入邻接矩阵即可:
```C++
vector<vector<int>> adj_matrix = {{0, 1, 0}, {0, 0, 1}, {1, 0, 0}};
vector<vector<int>> reachable_matrix = get_reachable_matrix(adj_matrix);
```
输出结果为:
```
1 1 1
1 1 1
1 1 1
```
其中,邻接矩阵为:
```
0 1 0
0 0 1
1 0 0
```
可达矩阵为:
```
1 1 1
1 1 1
1 1 1
```
表示任意两个节点之间都是可达的。