我正在为我的算法类编写一个项目,我需要它在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循环中。
我该如何解决?有人曾经经历过这样的事情吗?
提前感谢!
上面的代码所源自的geeksforgeeks site已被窃听。错误出在Graph::DinicMaxflow
方法中。此行
int *start = new int[V+1];
假设start
数组将初始化为零,但C ++不保证这样做。某些编译器将初始化为零。 Visual Studio不会将此数组初始化为零,但是很明显,在VSCode之后使用的编译器都会这样做。
为了保证零初始化,将上面的行更改为此
int *start = new int[V+1]{};