【发布时间】:2020-06-14 16:31:58
【问题描述】:
为了检查循环,程序从图中的第一个节点到图中的每个锁定节点-> 检查它是否之前访问过,然后是一个循环,否则从检查的下一个节点递归地重复。 当我自己测试它时它可以工作,但是当我在潮人选举中使用它时它却没有。
问题说明:https://cs50.harvard.edu/x/2020/psets/3/tideman/
这个问题的目标是使用潮人投票算法从选举中选出获胜者。 CS50 ide 提供了测试功能 Check50 ,我正在尝试修复这些错误: 1.lock_pairs 如果创建循环则跳过最后一对 2.lock_pairs如果创建循环则跳过中间pair。
我的逻辑错了吗?
int graph[nodes_count][nodes_count];
bool check_cycle()
{
//if a node is visited during checking cycles visited[]=true
bool visited[nodes_count];
bool circle = false;
return gointo(circle, visited, 0);
}
bool gointo(bool &circle, bool visited[], int to)
{
// start trip form one node in the graph check if it have been visited ( Cycle )
visited[to] = true;
for (int n = 0; n < nodes_count; n++)
{
if (graph[to][n])
{
if (visited[n])
{
circle = true;
}
else
{
gointo(visited, n);
}
break;
}
}
return circle;
}
我的完整解决方案:https://pastebin.com/sbua3EGA
感谢您的宝贵时间,抱歉英语不好:)
【问题讨论】:
-
如果你能提供一小段代码来演示问题,而不是 250 行,你更有可能得到答案。
-
@Han-Kwang Nienhuys 好的。我放了整个程序,因为我用我自己的锁定对图及其作品尝试了这个功能
-
这样更好,但你还是需要解释一下各种变量代表什么:
pairs,locked,visited。 -
@Han-Kwang Nienhuys 我会尽我所能,如果您想全面了解问题,请查看问题中的链接。
标签: c algorithm cs50 adjacency-matrix directed-graph