Assam ALzookery Ответов: 1

Предупреждения о слишком малых размерах массивов для функций в C++


Я запускаю предупреждение после компиляции своего кода "
Time out error, probably infinite loop.

"
Я до сих пор не понимаю, в чем главная проблема этой проблемы, Проблема в том, что массивы слишком малы, следовательно, тайм-ауты?

Ввод:

4 6
Women Conservatives Neocons Veterans
Trump Women 1
Trump Conservatives 1
Trump Neocons 5
Women Neocons 1
Neocons Veterans 5
Conservatives Veterans 1


Выход:

8

Вот мой код:

Что я уже пробовал:

Я попытался изменить размер массива.

		    
                    

[no name]

Наиболее вероятным объяснением является ваш рекурсивный вызов функции, а не размер массива.

Assam ALzookery

Не могли бы вы показать лучший способ решить это предупреждение

1 Ответов

Рейтинг:
1

Patrice T

Вам нужно полностью переосмыслить эту функцию:

bool reachable(int src, int target, int par = -1) {
    if (src == target) return true;
    
    bool isReachable = false;
    
    for (int i = 0; i < 100; ++i) {
        if (i != par && graph[src][i] != 0 && reachable(i, target, src)) {
            isReachable = true;
        }
    }
    return isReachable;
}

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

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.