我现在正在尝试使用boost :: topological_sort()函数并遇到问题。
首先,我检查了
给出的示例代码https://boostjp.github.io/tips/graph.html#topological-sort
,它在我的环境中运行良好(Win10 x64 Pro / Visual Studio 2017 with Boost 1.6.9)。但是当我将图形定义更改为
const std::vector<Edge> edges = {
{ 0, 1},
{ 1, 14},
{ 3, 4},
{ 4, 15},
{ 5, 6},
{ 6, 16},
{ 7, 2},
{ 8, 9},
{ 9, 17},
{10, 11},
{11, 18},
{12, 13},
{13, 19},
{22, 23},
{23, 20},
{24, 25},
{25, 21},
};
它返回错误的答案
24 25 22 23 21 20 12 13 19 10 11 18 8 9 17 7 5 6 16 3 4 15 2 0 1 14。
正确的是
24 25 21 22 23 20 12 13 19 10 11 18 8 9 17 7 2 5 6 16 3 4 15 0 1 14。
尽管该图是DAG,但它与
的连接高度断开boost :: topological_sort()通常不支持断开的有向图吗?当我更改图形定义
const std::vector<Edge> edges_ok = {
{ 0, 1},
{ 1, 14},
{14, 3}, //add
{ 3, 4},
{ 4, 15},
{15, 5}, //add
{ 5, 6},
{ 6, 16},
{16, 7}, //add
{ 7, 2},
{ 2, 8}, //add
{ 8, 9},
{ 9, 17},
{17, 10}, //add
{10, 11},
{11, 18},
{18, 12}, //add
{12, 13},
{13, 19},
{19, 22}, //add
{22, 23},
{23, 20},
{20, 24}, //add
{24, 25},
{25, 21},
};
它工作正常。
谢谢。
武史