没有合适的资源?快使用搜索试试~ 我知道了~
首页C++实现拓扑排序(AOV网络)
资源详情
资源评论
资源推荐

C++实现拓扑排序(实现拓扑排序(AOV网络)网络)
主要为大家详细介绍了C++实现拓扑排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙
伴们可以参考一下
本文实例为大家分享了C++实现拓扑排序的具体代码,供大家参考,具体内容如下
一、思路一、思路
先扫描所有顶点,把入度为0的顶点(如C,E)进栈。然后,取栈顶元素,退栈,输出取得的栈顶元素v(即入度为0的顶点
v)。接着,把顶点v的邻接顶点w的入度减1,如果w的入度变为0,则进栈。接着,取顶点w的兄弟结点(即取顶点v的邻接顶
点w的下一邻接顶点),做同样的操作。重复上面步骤,直到输出n个顶点。
如上图:
(1)扫描所有顶点,把入度为0的顶点进栈:将顶点C,E进栈;
(2)取栈顶元素,退栈,输出取得的栈顶元素E。接着,把顶点E的邻接顶点A、B和F的入度减1,如果入度变为0,则进
栈。因为顶点A入度变为0,所以要进栈;
(3)重复(2)步骤,直到输出n个顶点。
二、实现程序:二、实现程序:
1.Graph.h:有向图
#ifndef Graph_h
#define Graph_h
#include <iostream>
using namespace std;
const int DefaultVertices = 30;
template <class T, class E>
struct Edge { // 边结点的定义
int dest; // 边的另一顶点位置
Edge<T, E> *link; // 下一条边链指针
};
template <class T, class E>
struct Vertex { // 顶点的定义
T data; // 顶点的名字
Edge<T, E> *adj; // 边链表的头指针
};
template <class T, class E>
class Graphlnk {
public:
const E maxValue = 100000; // 代表无穷大的值(=∞)
Graphlnk(int sz=DefaultVertices); // 构造函数
~Graphlnk(); // 析构函数
void inputGraph(int count[]); // 建立邻接表表示的图
void outputGraph(); // 输出图中的所有顶点和边信息
T getValue(int i); // 取位置为i的顶点中的值
bool insertVertex(const T& vertex); // 插入顶点
bool insertEdge(int v1, int v2); // 插入边
bool removeVertex(int v); // 删除顶点
bool removeEdge(int v1, int v2); // 删除边
int getFirstNeighbor(int v); // 取顶点v的第一个邻接顶点
int getNextNeighbor(int v,int w); // 取顶点v的邻接顶点w的下一邻接顶点
int getVertexPos(const T vertex); // 给出顶点vertex在图中的位置
int numberOfVertices(); // 当前顶点数
private:
int maxVertices; // 图中最大的顶点数
int numEdges; // 当前边数













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0