[邻接表形式]有向图的建立与深度,广度遍历
目录
前文回顾:
DirectedGraph类的构成
const int N = 10;
int visit[N];
struct ConnectNode{ //邻接节点的坐标
int site;
ConnectNode* next;
};
template<typename DataType>
struct VertexNode //顶点表
{
DataType value;
ConnectNode* firstEdge;
};
template<typename DataType>
class DirectedGraph{ //有向图
public:
DirectedGraph(DataType a[], int n, int e);
~DirectedGraph();
void DF(int x);
void BF(int x);
private:
VertexNode<DataType> v[N];
int vNum,edgeNum;
};
构造函数
template<typename DataType>
DirectedGraph<DataType>::DirectedGraph(DataType a[], int n, int e):vNum(n),edgeNum(e)
{
for(int i = 0; i < vNum; i++){
v[i].value = a[i];
v[i].firstedge = NULL;
}
int j,k;
ConnectNode* s = NULL;
for(int i = 0; i < edgeNum; i++){
cin >> j >> k;
s = new ConnectNode;
s->site = k;
s->next = v[j].firstEdge;
v[j].firstEdge = s;
}
}
析构函数
template<typename DataType>
DirectedGraph<DataType>::~DirectedGraph()
{
ConnectNode *p = NULL, *q = NULL;
for(int i = 0; i < vNum; i++){
p = q = v[i].firstEdge;
while(p){
p = p->next;
delete q;
q = p;
}
}
}
深度优先遍历
template<typename DataType>
void DirectedGraph<DataType>::DF(int x)
{
cout << v[x].value << endl;
visit[x] = 1;
ConnectNode *p = v[x].firstEdge;
while(p)
{
if(visit[p->site]) DF(p->site);
p = p->next;
}
}
广度优先遍历
template<typename DataType>
void DirectedGraph<DataType>::BF(int x)
{
int Q[N];
int front = -1, rear = -1;
ConnectNode* p = NULL;
cout << v[x].value << endl;
visit[x] = 1;
Q[++rear] = x;
while(front != rear)
{
int t = Q[++front];
p = v[t].firstEdge;
while (p)
{
if(!visit[p->site]){
cout << v[p->site].value << endl;
visit[p->site] = 1;
Q[++rear] = p->site;
}
p = p->next;
}
}
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799057.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY