【发布时间】:2020-06-09 08:00:24
【问题描述】:
我正在为我的算法类编写一个项目,我需要它在 Visual Studio 2017 上工作。当我通过命令行使用 g++ 编译它时一切正常,但是当我尝试通过 VS 2017 启动程序时它进入这个函数中的无限循环(它是dinic最大流量算法的一部分):
bool Graph::BFS(int s, int t)
{
for (int i = 0; i < V; i++)
level[i] = -1;
level[s] = 0; // Level of source vertex
list<int> q;
q.push_back(s);
vector<Edge>::iterator i;
while (!q.empty())
{
int u = q.front();
q.pop_front();
for (i = adj[u].begin(); i != adj[u].end(); i++)
{
Edge &e = *i;
if (level[e.v] < 0 && e.flow < e.C)
{
// Level of current vertex is, level of parent + 1
level[e.v] = level[u] + 1;
q.push_back(e.v);
}
}
}
// IF we can not reach to the sink we return false else true
return level[t] < 0 ? false : true;
}
在while循环中。
我该如何修复它?有没有人经历过这样的事情?
提前致谢!
【问题讨论】:
-
是的,在环境中工作但在另一个环境中不工作的错误代码非常常见。您没有提供足够的信息来诊断错误,但是您正在进行大量数组/向量访问,我希望其中一个超出范围。
-
@john 是极客的算法形式极客:geeksforgeeks.org/dinics-algorithm-maximum-flow
-
你能找到其中的错误吗?
-
就像@john 说的你没有提供足够的信息。例如什么是 s 和 t 值?尝试使用调试器并查看此函数中的值,因为从您提供的链接中我可以看到这只是算法中间的一个函数
-
@Paweł OK 我已经找到问题所在了,geeksforgeeks 的名声不好,这里有一个例子
标签: c++ visual-studio visual-studio-code breadth-first-search