//邻接表存储
#include<iostream>
using namespace std;
const int maxsize = 100;
int visited[maxsize] = { 0 };
struct EdgeNode {
int adjvex;
EdgeNode* next;
};
template<typename T>
struct VertexNode {
T vertex;
EdgeNode* firstEdge;
};
template<typename T>
class ALGraph {
private:
int vertexnum, edgenum;
VertexNode<T>adjlist[maxsize];
public:
ALGraph(T a[], int n, int e);
~ALGraph();
void shenBL(int v);
void guangBL(int v);
};
template<typename T>
ALGraph<T>::ALGraph(T a[], int n, int e) {
vertexnum = n; edgenum = e;
for (int i = 0; i < verternum; i++) {
adjlist[i].vertex = a[i];
adjlist[i].firstEdge = nullptr;
}
for (int i = 0; i < edgenum; i++) {
int j, k;
cin >> j >> k;
EdgeNode<T>* s = new EdgeNode;
s->adjvex = k;
s->next = adjlist[i].firstEdge;
adjlist[i].firstEdge = s;
}
}
template<typename T>
ALGraph<T>::~ALGraph() {
EdgeNode<T>* p=nullptr, * q=nullptr;
for (int i = 0; i < vertexnum; i++) {
p = q = adjlist[i].firstEdge;
while (q != nullptr) {
p = p->next;
delete q;
q = p;
}
}
}
//深度优先遍历
template<typename T>
void ALGraph<T>::shenBL(int v) {
EdgeNode* p = adjlist[v].firstEdge;
cout << adjlist[v].vertex; visited[v] = 1;
while (p != nullptr) {
int j = p->adjvex;
if (visited[j] != 0) {
shenBL(j);
}
p = p->next;
}
}
//广度优先遍历
template<typename T>
void ALGraph<T>::guangBL(int v) {
int Q[maxsize];
int front = -1, rear = -1;
EdgeNode* p = nullptr;
cout << adjlist[v].vertex; visited[v] = 1;
Q[++rear] = v;
while (rear != front) {
int w = Q[++front];
p = adjlist[w].firstEdge;
while (p != nullptr) {
int j = p->adjvex;
if (visited[j] == 0) {
cout << adjlist[j].vertex; visited[j] = 1;
Q[++rear] = j;
}
p = p->next;
}
}
}
邻接表存储图的模板
最新推荐文章于 2023-05-04 16:44:18 发布