用c++写一个图的构造与遍历要求实现创建邻接矩阵算法Create(MGraph &G)或邻接表算法CreateALGraph(ALGraph &G) ;实现图的深度遍历操作DFSTraverse(ALGraph &G)或实现图的广度优先遍历BFSTraverse(ALGraph &G)。
时间: 2024-02-19 19:02:32 浏览: 129
以下是一个基于邻接矩阵表示图的构造和遍历的 C++ 代码示例:
```c++
#include <iostream>
#include <queue>
using namespace std;
#define MAXVEX 100
typedef struct {
int vexs[MAXVEX]; // 存储顶点信息
int arcs[MAXVEX][MAXVEX]; // 邻接矩阵,存储边的信息
int numVertexes, numEdges; // 图中的顶点数和边数
} MGraph;
bool visited[MAXVEX]; // 记录顶点是否被访问过
// 创建邻接矩阵图
void Create(MGraph &G) {
cout << "请输入顶点数和边数:";
cin >> G.numVertexes >> G.numEdges;
// 初始化邻接矩阵
for (int i = 0; i < G.numVertexes; i++) {
for (int j = 0; j < G.numVertexes; j++) {
G.arcs[i][j] = 0;
}
}
// 输入顶点信息
cout << "请输入顶点信息:" << endl;
for (int i = 0; i < G.numVertexes; i++) {
cin >> G.vexs[i];
}
// 输入边的信息
cout << "请输入边的信息:" << endl;
for (int i = 0; i < G.numEdges; i++) {
int u, v;
cin >> u >> v;
G.arcs[u][v] = 1;
G.arcs[v][u] = 1; // 无向图需要加上这行代码
}
}
// 深度优先遍历
void DFS(MGraph G, int v) {
visited[v] = true;
cout << G.vexs[v] << " ";
for (int i = 0; i < G.numVertexes; i++) {
if (G.arcs[v][i] == 1 && !visited[i]) {
DFS(G, i);
}
}
}
void DFSTraverse(MGraph G) {
for (int i = 0; i < G.numVertexes; i++) {
visited[i] = false;
}
for (int i = 0; i < G.numVertexes; i++) {
if (!visited[i]) {
DFS(G, i);
}
}
}
// 广度优先遍历
void BFSTraverse(MGraph G) {
for (int i = 0; i < G.numVertexes; i++) {
visited[i] = false;
}
queue<int> q;
for (int i = 0; i < G.numVertexes; i++) {
if (!visited[i]) {
visited[i] = true;
cout << G.vexs[i] << " ";
q.push(i);
while (!q.empty()) {
int v = q.front();
q.pop();
for (int j = 0; j < G.numVertexes; j++) {
if (G.arcs[v][j] == 1 && !visited[j]) {
visited[j] = true;
cout << G.vexs[j] << " ";
q.push(j);
}
}
}
}
}
}
int main() {
MGraph G;
Create(G);
cout << "深度优先遍历结果:" << endl;
DFSTraverse(G);
cout << endl;
cout << "广度优先遍历结果:" << endl;
BFSTraverse(G);
return 0;
}
```
在上面的代码中,我们使用了一个结构体 `MGraph` 来存储图的信息,包括顶点信息和邻接矩阵。使用 `Create()` 函数来创建邻接矩阵图,`DFS()` 函数和 `DFSTraverse()` 函数实现深度优先遍历,`BFSTraverse()` 函数实现广度优先遍历。在遍历时,我们使用了一个 `visited` 数组来记录顶点是否被访问过,使用了一个队列来实现广度优先遍历。
使用示例:
```
请输入顶点数和边数:5 6
请输入顶点信息:
a b c d e
请输入边的信息:
0 1
0 2
0 3
1 2
2 3
3 4
深度优先遍历结果:
a b c d e
广度优先遍历结果:
a b c d e
```
阅读全文