c - CS50 的 Tideman 问题集中 lock_pairs 函数的缺陷
问题描述
有人可以指出我的逻辑有什么缺陷吗?将不胜感激。
基本上,我试图用嵌套循环做的是检查任何一对的输家是否是前一对的赢家(具有更高的胜利强度)。如果是,然后我进入内部循环,检查这对的赢家是否在之前的任何一对中都是输家,从而创建一个循环。我对什么构成循环的理解是否正确?我怎样才能在不实施递归的情况下纠正这个问题?我不知道该怎么做。
void lock_pairs(void)
{
bool cycleCheck = false;
for (int u = 0; u < pair_count; u++)
{
for (int m = 0; m < u; m++)
{
if (pairs[u].loser == pairs[m].winner)
{
for (int k = m; k < u; k++)
{
if (pairs[u].winner == pairs[k].loser)
{
locked[pairs[u].winner][pairs[u].loser] = false;
cycleCheck = true;
}
}
}
}
if (cycleCheck == false)
{
locked[pairs[u].winner][pairs[u].loser] = true;
}
cycleCheck = false;
}
}
解决方案
给定一对 A 击败 B,要检查循环,您应该遍历所有对以寻找 B 作为赢家。然后,对于每个输给 B 的候选人,您应该遍历所有对,寻找该候选人作为获胜者。然后,对于每一个输给这个候选人的候选人……你明白了。如果在任何时候出现A,它就是一个循环。
推荐阅读
- node.js - crypotjs - 使用 findOne() 解密值
- c++ - 当子类需要在 C++ 中相互包含时的有缺陷的继承
- ios - 如何使用拖动事件移动 UIImageView
- geometry - MySQL 5.6 查找距离内的点并按距离排序 ASC
- java - 在 ECLIPSE 中与 Windows Builder 不兼容的 java 版本
- swift - SwiftUI 在变量更改时调用函数
- arrays - 映射 redux 传奇结果
- python - 如何防止归一化公式产生 NaN 值?
- java - 我可以将 Spring JPA 与只读数据库一起使用吗?
- sql - PDO 内连接?