c++ - 无法理解如何摆脱 goto
问题描述
这个问题可能有点傻,但我真的需要帮助。
我在编程方面很新,据我所知,goto
这是我应该在我的代码中避免的事情。几天前,我为我的学校任务写了这个:
bool create_way(int start_index) {
if (start_index == members.get_size() - 1) {
flowToDrain.push_back(start_index);
return true;
}
find_any_way:
int max_index = INT_MIN;
int max_bandwidth = INT_MIN;
for (int i = 0; i < network[start_index].routes.get_size(); i++) {
int index = network[start_index].routes.find(i);
int bandwidth = network[index].bandwidth.find(start_index);
if (bandwidth > max_bandwidth && !network[index].visited) {
max_index = index;
max_bandwidth = bandwidth;
}
}
network[start_index].visited = true;
if (max_index != INT_MIN) {
if (!create_way(max_index)) goto find_any_way;
else {
flowToDrain.push_back(start_index);
return true;
}
}
else return false; }
我写信goto
是为了记住算法的逻辑,但现在我真的坚持下去了。从那以后,我还没有想出如何摆脱这种情况的任何想法。我明白,它应该是一个循环,可能带有continue
,但我不明白要在其中检查什么表达式。
解决方案
这应该可以工作,尽管您应该对其进行测试:
while(1) {
int max_index = INT_MIN;
int max_bandwidth = INT_MIN;
for (int i = 0; i < network[start_index].routes.get_size(); i++) {
int index = network[start_index].routes.find(i);
int bandwidth = network[index].bandwidth.find(start_index);
if (bandwidth > max_bandwidth && !network[index].visited) {
max_index = index;
max_bandwidth = bandwidth;
}
}
network[start_index].visited = true;
if (max_index != INT_MIN) {
if (!create_way(max_index)) continue;
else {
flowToDrain.push_back(start_index);
return true;
}
}
else return false;
}
推荐阅读
- ansible - 即使满足条件,任务也会被跳过
- python - mysql连接器在一个单独的python进程中,不能在构造函数/__init__中腌制
- flutter - AndroidStudio:在 main.dart 中找不到入口点文件
- typescript - 带有静态方法的打字稿泛型类类型
- api - Microsoft Academic API - 按期刊 ID 计算直方图
- html - 如何使用可重用代码传递不同的值?
- github - github中部署和合并有什么区别
- java - 无法在 netbeans 中启用 JavaFX
- ansible - Ansible 连接到 Windows Server 2016
- json - 如何在 Postgres 中构建 JSON 对象而不显式引用每一列