拓扑排序

template<typename T> bool ALGraph<T>::TopoSort(vector<T> &topo) { vector<int> indegree(m_N, 0); //---存放每个顶点的入度 //---统计每个顶点的入度 for(int i = 0; i < m_N; i ++) for(ArcNode *p = m_Data[i].firstarc; p; p = p->nextarc) indegree[p->adjvex] ++; stack<int> S; //---存放入度为零的所有顶点的序号 //---将所有入度为零的顶点序号压栈 for(int i = 0; i < m_N; i ++) { if(indegree[i] == 0) S.push(i); } while(!S.empty()) { int out = S.top(); S.pop(); topo.push_back(m_Data[out].data); //---将入度为零的顶点的数据压入topo序列 for(ArcNode *p = m_Data[out].firstarc; p; p = p->nextarc) { indegree[p->adjvex] --; //---将以top为顶点的弧的尾点入度减一 if(indegree[p->adjvex] == 0) //---入度为零以后压栈 S.push(p->adjvex); } } if(topo.size() < m_N) //---比较拓扑序列元素个数与顶点数目 return false; return true; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值