2012-06-22 3 views
2

Я работаю над this problem, и мое решение, похоже, работает на каждый случай, который я могу себе представить, чтобы попробовать и сделать это в течение 3-секундного срока, но когда я отправляю онлайн, он все равно превышает 3 секунд. Я думаю, что должно быть так, что вызывает это время цикла, чтобы продолжаться бесконечно:Найти скрытую бесконечную петлю

while (!equals(availableChars, testChars)){ 
     next = getNextAlphaString(high, next, availableChars, it);  
     fillCharSet(next, testChars);  
    } 

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

bool equals(multiset<char>& availableChars, multiset<char>& test){ 
    multiset<char>::iterator it; 
    for (it = availableChars.begin(); it != availableChars.end(); it++){ 
     if ((int)availableChars.count(*it) != (int)test.count(*it)) return false; 
    } 
    return true; 
} 

*

string getNextAlphaString(char& high, string next, multiset<char>& availableChars, multiset<char>::iterator& it){ 
for (int i=next.size()-1; i>=0; i--){ 

    if (next[i] != high){ 
     it = availableChars.find(next[i]); 
     while(*it == next[i]){ 
      it++;   
      if (it == availableChars.end()){it = availableChars.begin(); break;} 
     } 
     next[i] = *it; 
     break;} 
    else{ 
     it = availableChars.begin(); 
     next[i] = *it; 
    }  
} 
return next; 
} 

*

void fillCharSet(string in, multiset<char>& chars){ 
    chars.clear(); 
    for (int i=0; i<in.size(); i++){chars.insert(in[i]);} 
} 
+5

Я собираюсь угадать, что вы не можете использовать 'std :: next_permutation'? – chris

+0

Получить реальную пару компилятора/отладчика и попытаться найти для себя? –

+3

@chris: Я понял, что вы не тот же самый крис. –

ответ

0

Ну ... здесь я отвечаю на свой вопрос. Я переписал его с помощью next_permutation, и он был намного проще и эффективнее. Я до сих пор не решил проблему с циклом с другим решением, но теперь мне это не нужно. Спасибо всем за советы :)

1

Вот статья для обнаружения бесконечных циклов с помощью GDB:

http://www.unknownroad.com/rtfm/gdbtut/gdbinfloop.html

Надеюсь, это поможет вам в решении этой проблемы.

+2

На секунду я подумал, что вы предлагаете, чтобы кто-то решил проблему с остановкой: D –

+0

Нет, просто простая статья. –

Смежные вопросы