拓扑排序(AOV网)

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int adjvex;
struct node*next;

}EdgeNode;

typedef struct vnode
{
int indegree;
int vertex;
EdgeNode *firstedge;
}VertexNode;

void Top_Sort(VertexNode g[],int n)
{
int i,j,k,top,m=0;
EdgeNode *p;
top=-1;
for(i=0;i<n;i++)
if(g[i].indegree0)
{
g[i].indegree=top;
top=i;
}
while(top!=-1)
{
j=top;
top=g[top].indegree;
printf("%d",g[i].vertex);
m++;
p=g[i].firstedge;
while(p!=NULL)
{
k=p->adjvex;
g[k].indegree–;
if(g[k].indegree
0)
{
g[k].indegree=top;
top=k;
}
p=p->next;
}

}
if(m<n)
    printf("the AOV network has a cycle\n");

}

/*void creatAdjlist(VertexNode g[],int e,int n)
{
EdgeNode *p;
int i,j,k;
printf(“initialize\n”);
for(i=0;i<n;i++)//初始化顶点信息
{
g[i].vertex=i;
g[i].firstedge=NULL;
g[i].indegree=0;

}
for(k=1;k<=e;k++)
{
    printf("input edge of(i->j))\n");
    scanf("%d%d",&i,&j);
    p=(EdgeNode*)malloc(sizeof(EdgeNode));
    p->adjvex=j;
    p->next=g[i].firstedge;
    g[i].firstedge=p;
    g[j].indegree+=1;

}

}*/

int main()
{
VertexNode g[6];
creatAdjlist(g,8,6);
Top_Sort(g,6);

return 0;

}

猜你喜欢

转载自blog.csdn.net/cruel2436/article/details/84403218
今日推荐