拓扑排序

来源:互联网 发布:seo h1标签 编辑:程序博客网 时间:2024/06/05 02:10

一.概念

      对于一个有向无环图G,其拓扑排序是G中所有节点的一种线性次序,该序列满足如果G包含(u,v),则节点u在拓扑排序中处于v节点的前面

二.算法实现

int  topological_sort(int **G,int n)     //G用邻接矩阵的方法保存有向图,n存储图的节点数{int * Flag=new int[n];  //Flag[i]用来标记Vi是否已被排到序列,若已被排到则Flag[i]=1,否则Flag[i]=0;int *T_S=new int[n];    //用来保存生成的序列for(int i=0;i<n;i++)Flag[i]=0;int temp=0;L:for(int i=0;i<n;i++){if(Flag[i]==0){int f=0;                          //用来标记是否有以Vi为终点的边for(int j=0;j<n;j++){if(Flag[j]==0){if(*((int*)G+n*j+i)==1)   //若有从Vj到Vi的边标记f为1f=1;}}if(f==0){Flag[i]=1;T_S[temp]=i;temp=temp+1;goto L;}}}for(int i=0;i<n;i++)cout<<T_S[i]<<"  ";return 0;}

三.举例

                                                        

int main(){int G[6][6]={{0,1,1,0,0,0},{0,0,0,1,0,0},{0,1,0,0,1,0},{0,0,0,0,0,1},{0,0,0,0,0,1},{0,0,0,0,0,0}};topological_sort((int **)G,6);return 0;}
      结果:



0 0
原创粉丝点击