基于邻接表的有向图实现
邻接表
图的链式存储结构
基于链表的相关操作
结点结构体
顶点表结点
struct VertexNode //顶点表结点
{
char vertex;
EdgeNode *firstEdge;
};
边表结点
struct EdgeNode //定义边表结点
{
int adjvex; //临接点域(编号)
EdgeNode *next;
};
图类的设计
class ALGraph
{
private:
VertexNode adjlist[MaxSize]; //存放顶点表的数组
int vertexNum,edgeNum; //图的顶点数和边数
int visited[MaxSize];
public:
ALGraph(char a[],int n,int e); //参数为结点数据域、顶点数量、边的数量
~ALGraph();
void initVisited();
void DFTraverse(int v); //深度优先遍历
void BFTraverse(int v); //广度优先遍历
void showEdgeInfo(); //展示边的信息
};
关键算法实现
深度优先遍历
void ALGraph::DFTraverse(int v)
{
int j;
EdgeNode *p=nullptr;
cout<<adjlist[v].vertex;
visited[v]=1;
p=adjlist[v].firstEdge; //工作指针指向顶点V的边表
while (p!=nullptr)
{
j=p->adjvex;
if(visited[j]==0) DFTraverse(j);
p=p->next;
}
}
广度优先遍历
void ALGraph::BFTraverse(int v)
{
int w,j,Q[MaxSize]; //投机队列
int front=-1,rear=-1;
EdgeNode *p=nullptr;
cout<<adjlist