使用c++实现拓扑排序
时间: 2023-02-24 22:10:44 浏览: 181
cpp代码-拓扑排序求最长路
拓扑排序是图论中的一种排序方式,用于对有向无环图 (DAG) 中的顶点进行排序。
在 C 语言中,可以使用邻接表来存储图的数据结构,然后使用入度数组记录每个顶点的入度数,再利用队列实现拓扑排序。
下面是一个简单的实现示例:
```
#include<stdio.h>
#include<stdlib.h>
#define MAX_VERTEX_NUM 20
int vertex_num, edge_num;
int in_degree[MAX_VERTEX_NUM];
int queue[MAX_VERTEX_NUM];
int head[MAX_VERTEX_NUM], tail;
struct EdgeNode{
int to;
int next;
};
struct EdgeNode edges[MAX_VERTEX_NUM];
int edge_num = 0;
void add_edge(int from, int to){
edges[edge_num].to = to;
edges[edge_num].next = head[from];
head[from] = edge_num++;
in_degree[to]++;
}
void topological_sort(){
int i, j, k;
tail = 0;
for (i = 0; i < vertex_num; i++){
if (!in_degree[i])
queue[tail++] = i;
}
while (tail){
int u = queue[--tail];
printf("%d ", u);
for (i = head[u]; ~i; i = edges[i].next){
int v = edges[i].to;
in_degree[v]--;
if (!in_degree[v])
queue[tail++] = v;
}
}
}
int main(){
int i, j, k;
memset(head, -1, sizeof(head));
scanf("%d%d", &vertex_num, &edge_num);
for (i = 0; i < edge_num; i++){
int from, to;
scanf("%d%d", &from, &to);
add_edge(from, to);
}
topological_sort();
return 0;
}
```
希望这对你有所帮助!
阅读全文