拓扑排序
来源:互联网 发布:手机版java通用版 编辑:程序博客网 时间:2024/06/18 17:49
//拓扑排序算法结构代码
typedef struct EdgeNode //边表结点
{
int adjvex;//邻接点
int weight;//权值
struct EdgeNode *next;//下一个结点
};
typedef struct VertexNode //顶点表结点
{
int in;//顶点入度
int data;//顶点存储的信息
EdgeNode *firstedge;//边表的头指针
}VertexNode,AdjList[MAXVEX];
typedef struct
{
AdjList adjlist;
int numVertexes, numEdges;
}graphAdjList,*GraphAdjList;
int TopologicalSort(GraphAdjList GL)
{
EdgeNode *e;
int i, k, gettop;
int top = 0;//用于栈指针下标
int count = 0;//用于统计输出顶点的个数
int *stack;//建栈存储入度为0的顶点
stack = (int*)malloc(GL->numVertexes*sizeof(int));
for ( i = 0; i < GL->numVertexes; i++)
{
if (GL->adjlist[i].in == 0)//如果该顶点的入度为0,就将这个顶点入栈
stack[++top] = i;
}
while (top != 0)
{
gettop = stack[top--];//出栈
printf("%d ->", GL->adjlist[gettop].data);//打印这个顶点
count++;//统计输出顶点数
for(e = GL->adjlist[gettop].firstedge; e; e=e->next)//对这个顶点的边表链接点(这个顶点的弧表)遍历
{
k = e->adjvex;
if (!(--GL->adjlist[k].in))//将k号顶点的邻接点的入度减1,再判断
stack[++top] = k;//如果为0就入栈,方便下次用来循环输出
}
}
if (count < GL->numVertexes)//如果count小于顶点数,说明存在环
return ERROR;
else
return OK;
}
typedef struct EdgeNode //边表结点
{
int adjvex;//邻接点
int weight;//权值
struct EdgeNode *next;//下一个结点
};
typedef struct VertexNode //顶点表结点
{
int in;//顶点入度
int data;//顶点存储的信息
EdgeNode *firstedge;//边表的头指针
}VertexNode,AdjList[MAXVEX];
typedef struct
{
AdjList adjlist;
int numVertexes, numEdges;
}graphAdjList,*GraphAdjList;
int TopologicalSort(GraphAdjList GL)
{
EdgeNode *e;
int i, k, gettop;
int top = 0;//用于栈指针下标
int count = 0;//用于统计输出顶点的个数
int *stack;//建栈存储入度为0的顶点
stack = (int*)malloc(GL->numVertexes*sizeof(int));
for ( i = 0; i < GL->numVertexes; i++)
{
if (GL->adjlist[i].in == 0)//如果该顶点的入度为0,就将这个顶点入栈
stack[++top] = i;
}
while (top != 0)
{
gettop = stack[top--];//出栈
printf("%d ->", GL->adjlist[gettop].data);//打印这个顶点
count++;//统计输出顶点数
for(e = GL->adjlist[gettop].firstedge; e; e=e->next)//对这个顶点的边表链接点(这个顶点的弧表)遍历
{
k = e->adjvex;
if (!(--GL->adjlist[k].in))//将k号顶点的邻接点的入度减1,再判断
stack[++top] = k;//如果为0就入栈,方便下次用来循环输出
}
}
if (count < GL->numVertexes)//如果count小于顶点数,说明存在环
return ERROR;
else
return OK;
}
0 0
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 【拓扑排序】
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- sqlserver连接服务器读取Oracle数据,sqlserver读取oracle的ODBC配置
- RabbitMQ源码解析前奏--集群
- 在子线程中 执行相关操作 请求网络
- 使用XAMPP启动Mysql失败
- Struts2、hibernate和spring下载,整合所需jar包
- 拓扑排序
- 神经网络学习笔记(十二):异或问题
- Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件
- Min Stack
- pbc的安装生成头文件和libpbc.a文件
- Python使用struct处理二进制(pack和unpack用法)
- ResourceBundle 实现定时重载 properties 文件
- 项目配置文件app.config/configuration/configSections
- 快捷键的使用