#ifndef ALGraph_H
#define ALGraph_H
const int MaxSize = 10;
struct ArcNode
{
int adjvex;
ArcNode* next;
};
template <class DataType>
struct VertexNode
{
DataType vertex;
ArcNode* firstedge;
};
template<class DataType>
class ALGraph
{
public:
ALGraph(DataType a[], int n, int e);
~ALGraph();
void DFSTraverse(int v, int visited[]);
void BFSTraverse(int v, int visited[]);
private:
VertexNode<DataType>adjlist[MaxSize];//存放顶点的数组
int vertexNum, arcNum; //图的顶点数和边数
};
#endif // !ALGraph_H
#include <iostream>
using namespace std;
#include "MGraph.h"
template<class DataType>
ALGraph<DataType>::ALGraph(DataType a[], int n, int e)
{
ArcNode* s;
int i, j, k;
vertexNum = n; arcNum = e;
for (i = 0; i < vertexNum; i++)
{
adjlist[i].vertex = a[i];
adjlist[i].firstedge = NULL;
}
for (k = 0; k < arcNum; k++)
{
cout << "请输入边的两个顶点的序号:";
cin >> i >> j;
s = new ArcNode; s->adjvex = j;
s->next = adjlist[i].firstedge;
adjlist[i].firstedge = s;
}
}
template <class DataType>
ALGraph<DataType>::~ALGraph()
{
ArcNode* p = NULL;
for (int i = 0; i < vertexNum; i++)
{
p = adjlist[i].firstedge;
while (p != NULL)
{
adjlist[i].firstedge = p->next;
delete p;
p = adjlist[i].firstedge;
}
}
}
template <class DataType>
void ALGraph<DataType>::DFSTraverse(int v,int visited[])
{
ArcNode* p = NULL; int j;
cout << adjlist[v].vertex; visited[v] = 1;
p = adjlist[v].firstedge;
while (p != NULL)
{
j = p->adjvex;
if (visited[j] == 0)DFSTraverse(j,visited);
p = p->next;
}
}
template<class DataType>
void ALGraph<DataType>::BFSTraverse(int v, int visited[])
{
int Q[MaxSize];
int front = -1; int rear = -1;
ArcNode* p = NULL;
cout << adjlist[v].vertex; visited[v] = 1; Q[++rear] = v;
while (front!=rear)
{
v = Q[++front];
p = adjlist[v].firstedge;
while (p != NULL)
{
int j = p->adjvex;
if (visited[j] == 0)
{
cout << adjlist[j].vertex; visited[j] = 1; Q[++rear] = j;
}
p = p->next;
}
}
}
#include <iostream>
using namespace std;
#include "冲.cpp"
int visited[MaxSize] = { 0 };
int main()
{
char ch[] = { 'A','B','C','D','E' };
int i;
ALGraph<char>ALG(ch, 5, 6);
for (i = 0; i < MaxSize; i++)
{
visited[i] = 0;
}
cout << "深度优先遍历序列是:";
ALG.DFSTraverse(0, visited);
cout << endl;
for (i = 0; i < MaxSize; i++)
{
visited[i] = 0;
}
cout << "广度优先遍历序列是:";
ALG.BFSTraverse(0, visited);
cout << endl;
return 0;
}
邻接表 深度优先 广度优先 遍历图
最新推荐文章于 2022-08-18 17:49:38 发布
本文详细介绍了使用C++实现的图数据结构,包括邻接表的定义以及深度优先搜索(DFS)和宽度优先搜索(BFS)的遍历算法。这些算法在图的遍历和搜索中具有重要应用。通过实例展示了如何创建图,并对图进行深度和广度优先遍历,输出遍历序列。
摘要由CSDN通过智能技术生成