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