
{
g.vernum = n;
g.arcnum = e;
for (int i = 0; i < g.vernum; i++)
{
g.adjlist[i].vertex = a[i];
g.adjlist[i].first = NULL;
g.adjlist[i].in = b[i];
}
for (int i = 0; i < g.arcnum; i++)
{
int vi, vj,in;
int num = 0;
printf("请输入边的起点和终点序号");
scanf_s("%d,%d", &vi, &vj);
Arcnode* s = (Arcnode*)malloc(sizeof(Arcnode));
s->adjvex = vj;
s->next = NULL;
s->next = g.adjlist[vi].first;
g.adjlist[vi].first = s;
}
}
void Topology(Graph g)
{
int stack[100];
int count = 0, top = 0;
for (int i = 0; i < g.vernum; i++)
{
if (g.adjlist[i].in == 0)
{
stack[top] = i;
top++;
}
}
while (top > 0)
{
int curr = stack[--top];
printf("%c ", g.adjlist[curr].vertex);
count++;
Arcnode* p = g.adjlist[curr].first;
while (p != NULL)
{
g.adjlist[p->adjvex].in--;
if (g.adjlist[p->adjvex].in == 0)
{
stack[top] = p->adjvex;
top++;
}
p = p->next;
}
}
if (count < g.vernum)
printf("有回路");
}
int main()
{
Graph g;
char verlist[] = "ABCDEF";
int in[] = { 3,0,1,3,0,2 };
Creategraph(g,verlist,in,6,9);
Topology(g);
}
