拓扑排序

来源:互联网 发布:微店发货软件 编辑:程序博客网 时间:2024/06/15 02:39
typedef struct ArcNode{int adjvex;//该边所指向的结点的位置 struct ArcNode *nextarc;//指向下一条边的指针 int info;}ArcNode; typedef struct VNode{char data;int count;//统计该点的入度 ArcNode *firstarc;//指向下一个 第一条边的指针 }VNode;typedef struct{VNode adjlist[maxSize];int n,e;}AGraph;//拓扑排序   结果很可能不一样  因为入度为0 若有好多的话 则没有进行排序  int TopSort(AGraph *G) {int  j,n=0;int stack[maxSize],top=-1;ArcNode *p;for(int i=1;i<G->n;++i){if(G->adjlist[i].count==0){stack[++top]=i;}}while(top!=-1){i=stack[top--];++n;cout<<i<<" ";p=G->adjlist[i].firstarc;while(p!=NULL){j=p->adjvex;--(G->adjlist[j].count);if(G->adjlist[j].count==0){stack[++top]=j;}p=p->nextarc;}}if(n==G->n){return 1;//成功的返回1  失败的返回 0 }else{return 0;}}
拓扑排序就是 一个接着一个消灭入度为0的结点
原创粉丝点击