#include iostreamusing namespace std;#include string#include ALGraphcpp#include cstdlibint main systemcolor F0; cout项目实现人:高明霞endl; string ch = v0 v1 v2 v3 v4 v5 v6 v7 v8 v9; int n e; cout请输入有向图的顶点数:e
难点:如何实现深度优先遍历和广度优先遍历的算法。
解决方法:可以使用递归来实现深度优先遍历算法,使用队列来实现广度优先遍历算法。具体实现方法可以参考以下代码:
#include <iostream>
#include <queue>
using namespace std;
template<class T>
struct ArcNode {
int adjvex;
ArcNode<T> *nextarc;
};
template<class T>
struct VertexNode {
T data;
ArcNode<T> *firstarc;
};
template<class T>
class ALGraph {
private:
VertexNode<T> *adjlist;
int num_vertex;
int num_edge;
bool *visited;
public:
ALGraph(T ch[], int n, int e) {
num_vertex = n;
num_edge = e;
adjlist = new VertexNode<T>[num_vertex];
visited = new bool[num_vertex];
for (int i = 0; i < num_vertex; i++) {
adjlist[i].data = ch[i];
adjlist[i].firstarc = nullptr;
visited[i] = false;
}
cout << "请输入有向图的边:" << endl;
for (int i = 0; i < num_edge; i++) {
int v1, v2;
cin >> v1 >> v2;
ArcNode<T> *arc1 = new ArcNode<T>;
arc1->adjvex = v2;
arc1->nextarc = adjlist[v1].firstarc;
adjlist[v1].firstarc = arc1;
}
}
void DFS() {
for (int i = 0; i < num_vertex; i++) {
if (!visited[i]) {
DFS(i);
}
}
}
void DFS(int v) {
visited[v] = true;
cout << adjlist[v].data << " ";
ArcNode<T> *arc = adjlist[v].firstarc;
while (arc) {
if (!visited[arc->adjvex]) {
DFS(arc->adjvex);
}
arc = arc->nextarc;
}
}
void BFS() {
queue<int> q;
for (int i = 0; i < num_vertex; i++) {
visited[i] = false;
}
for (int i = 0; i < num_vertex; i++) {
if (!visited[i]) {
visited[i] = true;
cout << adjlist[i].data << " ";
q.push(i);
while (!q.empty()) {
int v = q.front();
q.pop();
ArcNode<T> *arc = adjlist[v].firstarc;
while (arc) {
if (!visited[arc->adjvex]) {
visited[arc->adjvex] = true;
cout << adjlist[arc->adjvex].data << " ";
q.push(arc->adjvex);
}
arc = arc->nextarc;
}
}
}
}
}
};
int main() {
cout << "项目实现人:高明霞" << endl;
string ch[] = {"v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9"};
int n, e;
cout << "请输入有向图的顶点数:" << endl;
cin >> n;
cout << "请输入有向图的边数:" << endl;
cin >> e;
ALGraph<string> ALG(ch, n, e);
cout << "深度优先遍历序列是:";
ALG.DFS();
cout << endl;
cout << "广度优先遍历序列是:";
ALG.BFS();
cout << endl;
return 0;
}
在这段代码中,ALGraph是一个模板类,用于表示有向图的邻接表。DFS()函数使用递归算法实现深度优先遍历,BFS()函数使用队列实现广度优先遍历
原文地址: http://www.cveoy.top/t/topic/iS7l 著作权归作者所有。请勿转载和采集!