typedef struct {
Vertex data;
int count;
ArcNode* firstarc;
}TopVNode; //头结点类型
void TopSort(AdjGraph* G)
{
int i, j;
int St[MAXV], top = -1;
ArcNode* p;
for (i = 0; i < G->n; i++)
G->adjlist[i].firstarc = 0;
for (i = 0; i < G->n; i++)
{
p = G->adjlist[i].firstarc;
while (p != NULL)
{
G->adjlist[p->adjvex].count++;
p = p->nextarc;
}
}
for (i = 0; i < G->n; i++)
if (G->adjlist[i].count == 0)
{
top++;
St[top] = i;
}
while (top > -1)
{
i = St[top];
top--;
cout << i << " ";
p = G->adjlist[i].firstarc;
while (p != NULL)
{
j = p->adjvex;
G->adjlist[j].count--;
if (G->adjlist[j].count == 0)
{
top++;
St[top] = j;
}
p = p->nextarc;
}
}
}
拓扑排序代码
最新推荐文章于 2024-05-23 14:39:06 发布