用c++写一个用bfs算法求出可达矩阵
时间: 2024-04-20 22:24:35 浏览: 97
可达矩阵的算法
当然可以!下面是一个使用C++编写的基于BFS算法求解可达矩阵的示例代码:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义矩阵的行数和列数
const int ROW = 5;
const int COL = 5;
// 定义矩阵中的四个方向
const int directions[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
// 判断坐标是否有效
bool isValid(int x, int y) {
return (x >= 0 && x < ROW && y >= 0 && y < COL);
}
// 使用BFS算法求解可达矩阵
vector<vector<bool>> findReachableMatrix(vector<vector<int>>& matrix) {
vector<vector<bool>> reachable(ROW, vector<bool>(COL, false));
queue<pair<int, int>> q;
// 遍历矩阵,找到所有起始点并加入队列
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (matrix[i][j] == 1) {
q.push(make_pair(i, j));
reachable[i][j] = true;
}
}
}
// 使用BFS算法搜索可达矩阵
while (!q.empty()) {
pair<int, int> curr = q.front();
q.pop();
int x = curr.first;
int y = curr.second;
// 在四个方向上搜索可达的位置
for (int i = 0; i < 4; i++) {
int nx = x + directions[i][0];
int ny = y + directions[i][1];
// 如果新位置有效且尚未被访问过,则加入队列并标记为可达
if (isValid(nx, ny) && !reachable[nx][ny]) {
q.push(make_pair(nx, ny));
reachable[nx][ny] = true;
}
}
}
return reachable;
}
int main() {
vector<vector<int>> matrix = {{0, 1, 0, 0, 1},
{1, 0, 1, 1, 0},
{0, 1, 0, 1, 0},
{0, 1, 1, 0, 0},
{1, 0, 0, 0, 1}};
vector<vector<bool>> reachableMatrix = findReachableMatrix(matrix);
// 输出可达矩阵
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
cout << reachableMatrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
此代码使用BFS算法来搜索可达矩阵。首先,遍历矩阵,找到所有起始点(值为1的点)并将其加入队列,并标记为可达。然后,使用BFS算法从队列中取出每个点,再在四个方向上搜索可达的位置,并将其加入队列并标记为可达。最后,返回一个布尔类型的矩阵,表示每个位置是否可达。在示例代码中,我们使用一个5x5的矩阵进行演示,你可以根据需要修改矩阵的大小和内容。
阅读全文