Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 拓扑排序中的序列保持_Algorithm_Sorting_Graph - Fatal编程技术网

Algorithm 拓扑排序中的序列保持

Algorithm 拓扑排序中的序列保持,algorithm,sorting,graph,Algorithm,Sorting,Graph,假设我有一个有向图,有一个源和汇,比如a和z。假设图是a->b->c->d->e->z,a->f->g->h->z 我想做的是维护拓扑排序结果中“子组”b->c->d->e和f->g->h的标识 我的想法是首先扫描图形,寻找由多个链接顶点组成的组,所有这些顶点都有一个入口点和一个出口点,然后用标记为“a”的“超级顶点”替换每个顶点,然后是“B”等 所以我会得到a->a->B->z或a->B->a->z的结果。两者都可以接受 当我找到所有的超级顶点后,我会进行拓扑排序,然后用原始排序的顶点替换超级

假设我有一个有向图,有一个源和汇,比如a和z。假设图是a->b->c->d->e->z,a->f->g->h->z

我想做的是维护拓扑排序结果中“子组”b->c->d->e和f->g->h的标识

我的想法是首先扫描图形,寻找由多个链接顶点组成的组,所有这些顶点都有一个入口点和一个出口点,然后用标记为“a”的“超级顶点”替换每个顶点,然后是“B”等

所以我会得到a->a->B->z或a->B->a->z的结果。两者都可以接受

当我找到所有的超级顶点后,我会进行拓扑排序,然后用原始排序的顶点替换超级顶点

所以我的最终结果是a->b->c->d->e>f->g->h->z,或者a->f->g->h->b->c->d->e->z

我需要一个算法-伪代码很好-来做这件事。如果可以,我将用perl实现

如果有帮助的话,图形以点文件的形式存在

非常感谢-这是我的第一个问题,所以要温柔


罗杰

首先进行深度优先搜索,并记录遇到节点的顺序

然后,在选择要添加到拓扑顺序的下一个节点时,选择DFS顺序中较早的节点

因此,在您的例子中,DFS顺序将是abcdezfgh,拓扑排序将是abcdefghz