图论算法之拓扑排序的简单代码

原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5711811.html 

这个代码是我在上一篇博文之前写的,当时只是简单地使用数组来代表一个图。拓扑排序的关键在于不停地寻找入度为0的点,如果算法还没有结束就找不到入度为0的点了,那么这个图中肯定有圈,这也是拓扑排序的一个应用,可以找到一个图中是否有圈。

另一个应用是发现一条贯穿所有节点的通路。

void topsort()
{
    int stack[vertexnum];
    int i = 0;
    int j = 0;
    int tmp;
    node *adjacent;
    for(i = 0;i<11;i++)
    {
        if(at[i].degree == 0)
            stack[j++] = i;
    }
    if(j == 0)
    {
        printf("there is a circle\n");
        return;
    }
    do{
        tmp = stack[--j];
        printf("%d\t",tmp);
        adjacent = at[tmp].adjacentlist;
        while(adjacent)
        {
            if(!--at[adjacent->i].degree)
                stack[j++] = adjacent->i;
            adjacent =adjacent->next;
        }
    }while(j>0);
    printf("\n");
}

 

posted @ 2016-07-27 17:00  __sipl  阅读(613)  评论(0编辑  收藏  举报