题目的描述如下
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 105
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *head;
} LinkedList;
typedef struct {
LinkedList adjList[MAXSIZE];
int inDegree[MAXSIZE];
} Graph;
typedef struct {
int data[MAXSIZE];
int front, rear;
} Queue;
// 初始化图
void initGraph(Graph *g, int n) {
for (int i = 1; i <= n; ++i) {
g->adjList[i].head = NULL;
g->inDegree[i] = 0;
}
}
// 添加边
void addEdge(Graph *g, int from, int to) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = to;
newNode->next = g->adjList[from].head;
g->adjList[from].head = newNode;
g->inDegree[to]++;
}
// 拓扑排序
void topologicalSort(Graph *g, int n) {
Queue q;
q.front = q.rear = 0;
for (int i = 1; i <= n; ++i) {
if (g->inDegree[i] == 0) {
q.data[q.rear++] = i;
}
}
while (q.front < q.rear) {
int current = q.data[q.front++];
printf("%d ", current);
Node *temp = g->adjList[current].head;
while (temp) {
g->inDegree[temp->data]--;
if (g->inDegree[temp->data] == 0) {
q.data[q.rear++] = temp->data;
}
temp = temp->next;
}
}
}
int main() {
int n;
scanf("%d", &n);
Graph g;
initGraph(&g, n);
for (int i = 1; i <= n; ++i) {
int child;
scanf("%d", &child);
while (child != 0) {
addEdge(&g, i, child);
scanf("%d", &child);
}
}
topologicalSort(&g, n);
return 0;
}
代码已亲测成功