第十三周项目5 拓扑排序算法的验证

来源:互联网 发布:java的23种模式 编辑:程序博客网 时间:2024/04/29 03:52

问题及代码:

/* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:zhou.cpp * 作    者:吕方舟 * 完成日期:2015年12月8日 * 版 本 号:v1.0   * 问题描述:拓扑排序算法的验证  * 输入描述:无 * 程序输出:测试数据 */  #include <stdio.h>  #include <malloc.h>  #include "graph.h"    void TopSort(ALGraph *G)  {      int i,j;      int St[MAXV],top=-1;            //栈St的指针为top      ArcNode *p;      for (i=0; i<G->n; i++)          //入度置初值0          G->adjlist[i].count=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)  //入度为0的顶点进栈          {              top++;              St[top]=i;          }      while (top>-1)                  //栈不为空时循环      {          i=St[top];          top--;              //出栈          printf("%d ",i);            //输出顶点          p=G->adjlist[i].firstarc;   //找第一个相邻顶点          while (p!=NULL)          {              j=p->adjvex;              G->adjlist[j].count--;              if (G->adjlist[j].count==0)//入度为0的相邻顶点进栈              {                  top++;                  St[top]=j;              }              p=p->nextarc;       //找下一个相邻顶点          }      }  }    int main()  {      ALGraph *G;      int A[7][7]=      {          {0,0,1,0,0,0,0},          {0,0,0,1,1,0,1},          {0,0,0,1,0,0,0},          {0,0,0,0,1,1,0},          {0,0,0,0,0,0,0},          {0,0,0,0,0,0,0},          {0,0,0,0,0,1,0}      };      ArrayToList(A[0], 7, G);      DispAdj(G);      printf("\n");      printf("拓扑序列:");      TopSort(G);      printf("\n");      return 0;  }  

运行结果:


知识点总结:拓扑排序算法的验证。

学习心得:领会了拓扑排序算法。


0 0
原创粉丝点击