# 图的构造和实现——邻接表[有向图]（c++）

6 篇文章 0 订阅
//环境：vs2010
//ALGraph.cpp

#include <iostream>
using namespace std;
const int MaxSize=10;            //图的最大顶点数

struct ArcNode   //定义边表结点
{
ArcNode *next;
};
template <class DataType>
struct VertexNode   //定义顶点表结点
{
DataType vertex;
ArcNode *firstedge;
};

template <class DataType>
class ALGraph
{
public:
ALGraph(DataType a[ ], int n, int e);   //构造函数，建立一个有n个顶点e条边的图
~ALGraph( );                        //析构函数，释放邻接表中各边表结点的存储空间
void DFSTraverse(int v);             //深度优先遍历图
void BFSTraverse(int v);              //广度优先遍历图
private:
int vertexNum, arcNum;              //图的顶点数和边数
};
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++)     //输入顶点信息，初始化顶点表
{
}
for (k = 0; k < arcNum; k++)        //依次输入每一条边
{
cout<<"请输入边的两个顶点的序号：";
cin >> i >> j;                 //输入边所依附的两个顶点的编号
s = new ArcNode; s->adjvex = j;  //生成一个边表结点s
}
}

template <class DataType>
ALGraph<DataType>::~ALGraph( )
{
ArcNode *p;
for(int i=0; i<vertexNum; i++)
{
while(p!=NULL)                                              //循环删除
{
delete p;                                                 //释放结点空间
}
}
}

template <class DataType>
void ALGraph<DataType>::DFSTraverse(int v)
{
ArcNode *p; int j;
while (p != NULL)                //依次搜索顶点v的邻接点j
{
if (visited[j] == 0) DFSTraverse(j);
p = p->next;
}
}

template <class DataType>
void ALGraph<DataType>::BFSTraverse(int v)
{
int front =-1, rear = -1;int k;   //初始化队列, 假设队列采用顺序存储且不会发生溢出
int Q[MaxSize];
ArcNode *p;
cout<<adjlist[v].vertex; visited[v] = 1; Q[++rear] = v;   //被访问顶点入队
while (front != rear)           //当队列非空时
{
k = Q[++front];
while (p != NULL)
{
if (visited[j] == 0) {
}
p=p->next;
}
}
}

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);
cout<<endl;
for (i = 0; i < MaxSize; i++)
visited[i] = 0;
cout<<"广度优先遍历序列是：";
ALG.BFSTraverse(0);
cout<<endl;
return 0;
}


• 2
点赞
• 0
评论
• 10
收藏
• 一键三连
• 扫一扫，分享海报

08-19
01-15 1868

03-26 2502
04-15 7196
12-06 1万+
07-17 1万+
10-27 2207
07-06 686
11-28 1991
12-09 2973
04-08 2073
01-08
04-08 353
04-05 6413
12-06 4713