если условие выполняется даже после того, как внутренняя функция условия с параметром возвращает false - PullRequest
0 голосов
/ 28 апреля 2020
bool isCycle(vector <int> adj[],int v)
{
    vector <bool> visited(v, false);
    for (int u = 0;u < v;u++)
    {
        if (visited[u] == false)
        {
           if(bfs(u, adj, visited,v));
                return true;
        }
    }
    return false;
}

даже после функции внутри, если условие вернуло false. Почему выполняется условие if ???

if(bfs(u, adj, visited,v));
       return true;

Ответы [ 2 ]

4 голосов
/ 28 апреля 2020

if(bfs(u, adj, visited,v)); return true; имеет дополнительный ';' после оператора 'if', который заставляет его выполнить пустой оператор (точку с запятой), если bfs () возвращает true, или ничего (так как нет 'else'), если bfs () возвращает false.

This сопровождаемый 'возвращают истину', который выполняется безоговорочно.

Возможно это предназначено:

if(bfs(u, adj, visited,v)) // No semicolon here
       return true;
0 голосов
/ 28 апреля 2020

Вот то, что, вероятно, происходит:

Вы находитесь в вашем для l oop, и вы посетили [u] равно false. Но тогда bfs (u, adj, visit, v) оценивается как false, поэтому внутренний оператор if не выполняется. Это продолжается до тех пор, пока вы не закончите с l oop, поэтому ваша функция возвращает false.

...