2012-06-28 4 views
0

Я попытался реализовать алгоритм BFS с таблицей смежности, которая реализована с помощью массива векторов. Я начинаю хранить ввод от 1, а не от 0.Внедрение BFS в C++

EDIT: Я обновил код: http://ideone.com/GZwPP, и теперь он компилируется и запускается, но когда я пытаюсь найти узел, которого нет в графике, я получаю эту ошибку:

terminate called after throwing an instance of 'std::out_of_range' 
    what(): vector::_M_range_check 
Aborted 
+0

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

+0

Я могу подтвердить, код отлично работает для меня – Alex

+0

Код компилирует - http://ideone.com/dT2fD игнорирует ошибку времени выполнения. –

ответ

1

Ошибка на самом деле тонкая. У вас есть в вашем коде:

for(i = 1; i <= adj[front].size() - 1 && adj[front].at(0) != 0; i++) 

Какой тип size()? Это неподписанный тип. Поэтому, когда size() == 0 затем size() - 1 > 0 из-за arithmetic overflow. Вы должны изменить линию на:

for(i = 1; i < adj[front].size() && adj[front].at(0) != 0; i++) 
Смежные вопросы