按照下列要求编写一个程序:c++ 1. 使用5x5布尔二维数组来表示需要遍历的图的连通性。 2. 使用深度优先算法遍历图。 3.使用广度优先算法遍历图。 4. 根据图的连通性合理选择遍历的起始位置。
时间: 2024-02-22 11:59:41 浏览: 118
以下是按照要求编写的 C++ 代码:
```c++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
bool graph[5][5] = {
{0, 1, 0, 1, 0},
{1, 0, 1, 1, 0},
{0, 1, 0, 1, 1},
{1, 1, 1, 0, 1},
{0, 0, 1, 1, 0}
};
void dfs(int node, bool visited[]) {
visited[node] = true;
cout << node << " ";
for (int i = 0; i < 5; i++) {
if (graph[node][i] && !visited[i]) {
dfs(i, visited);
}
}
}
void bfs(int node, bool visited[]) {
queue<int> q;
q.push(node);
visited[node] = true;
while (!q.empty()) {
int curr = q.front();
cout << curr << " ";
q.pop();
for (int i = 0; i < 5; i++) {
if (graph[curr][i] && !visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
}
int findStartNode() {
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (graph[i][j]) {
return i;
}
}
}
return 0;
}
int main() {
bool visited[5] = {false};
int start = findStartNode();
cout << "DFS: ";
dfs(start, visited);
cout << endl;
for (int i = 0; i < 5; i++) {
visited[i] = false;
}
cout << "BFS: ";
bfs(start, visited);
cout << endl;
return 0;
}
```
其中,`graph[i][j]`表示第`i`个节点和第`j`个节点是否连通,如果连通则为`true`,否则为`false`。
在`dfs`函数中,使用递归实现深度优先遍历,从起始节点开始遍历,如果当前节点和其他节点连通且未被访问过,则递归遍历该节点。
在`bfs`函数中,使用队列实现广度优先遍历,从起始节点开始遍历,将该节点入队列,然后依次出队列并访问该节点的所有连通节点,如果该节点未被访问过,则将其入队列并标记为已访问。
在`findStartNode`函数中,从第一个节点开始遍历所有节点,如果发现有两个节点相连,则返回其中一个节点作为起始节点,否则返回第一个节点作为起始节点。
在`main`函数中,首先找到起始节点,然后分别使用深度优先算法和广度优先算法遍历图,并输出遍历结果。
阅读全文