для проверки цикла программа переходит от первого узла в графе к каждому заблокированному узлу в графе-> проверяет, посещался ли он раньше, затем это цикл, иначе повторяется рекурсивно с проверенного следующего узла. когда я тестирую это сам, он работает, но когда я использую его на выборах tideman, он не работает.
объяснение проблемы: https://cs50.harvard.edu/x/2020/psets/3/tideman/
Цель этой задачи - выбрать победителя на выборах с помощью алгоритма голосования tideman. CS50 ide предоставляет тестовую функцию Check50, я пытаюсь исправить эти ошибки: 1.lock_pairs пропускает последнюю пару, если создает цикл. 2.lock_pairs пропускает среднюю пару, если создает цикл.
моя логика неверна?
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
спасибо за ваше время и извините за плохое английский :)
pairs
,locked
,visited
. - person Han-Kwang Nienhuys   schedule 14.06.2020