Touch_2011 发表于 2013-1-26 13:31:40

拓扑排序(C语言实现)

http://dl.iteye.com/upload/attachment/496407/1cd4c52f-a1a3-343a-801d-27702406c0ae.jpg
对这个有向图进行拓扑排序
/* * 拓扑排序(采用邻接矩阵存储) */#include<stdio.h>#define MAX_VERTEX_NUM 20//图的定义typedef struct {int vertexNum;char vertex;int arc;}Graph,*PGraph;//构造有向图void createdGraph(PGraph g){int i,j;    g->vertexNum=6;    for(i=0;i<g->vertexNum;i++)g->vertex='A'+i;for(i=0;i<g->vertexNum;i++)for(j=0;j<g->vertexNum;j++)            g->arc=0;g->arc=1;g->arc=1;g->arc=1;g->arc=1;g->arc=1;g->arc=1;g->arc=1;g->arc=1;}//拓扑排序void TopologicalSort(PGraph g){    int i,j,k=0,m;char vertex;while(k < g->vertexNum){//1.找没有入度的顶点,存入数组vertex中    for(i=0;i<g->vertexNum;i++){    for(j=0;j<g->vertexNum;j++){    if(g->arc!=0)    break;}if(j==g->vertexNum){//检查g->vertex是否已经遍历for(m=0;m<k;m++)if(vertex==g->vertex)break;if(m==k){      vertex=g->vertex;break;}}}//2.没有入度为0的顶点if(i==g->vertexNum){printf("存在回路!\n");return ;}//3.删除这个顶点的出度      for(j=0;j<g->vertexNum;j++)g->arc=0;}//输出排序后的结果printf("拓扑排序结果:\n");for(i=0;i<k;i++)printf("%-3c",vertex);printf("\n");}void main(){Graph graph;createdGraph(&graph);TopologicalSort(&graph);} 
页: [1]
查看完整版本: 拓扑排序(C语言实现)