代码在 Visual Studio 2017 中不起作用,但在 VS 代码中起作用

Code not working in Visual Studio 2017 but works in VS code

我正在为我的算法 类 编写一个项目,我需要它在 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]{};