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

问题描述 投票:0回答:1

我正在为我的算法类编写一个项目,我需要它在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循环中。

我该如何解决?有人曾经经历过这样的事情吗?

提前感谢!

c++ visual-studio visual-studio-code breadth-first-search
1个回答
0
投票

上面的代码所源自的geeksforgeeks site已被窃听。错误出在Graph::DinicMaxflow方法中。此行

int *start = new int[V+1];

假设start数组将初始化为零,但C ++不保证这样做。某些编译器将初始化为零。 Visual Studio不会将此数组初始化为零,但是很明显,在VSCode之后使用的编译器都会这样做。

为了保证零初始化,将上面的行更改为此

int *start = new int[V+1]{}; 
© www.soinside.com 2019 - 2024. All rights reserved.