2016-04-20 1 views
-1

Я пытаюсь создать алгоритм первого поиска глубины при задании двух строк. Я построил свой график, но у меня проблемы с алгоритмом поиска по ширине. Я не совсем уверен, что мне делать с моими int a и int b, которые я получаю от своей хэш-функции.Breadth First Search two Strings

Для контекста .... Узел вершины имеет имя ex. Джон, и набор строк, которые представляют собой списки других имен, с которыми Джон дружит. Мне дано два имени в основном из. Джон и Мэри, и я хочу распечатать пути, соединяющие эти два имени. У меня только код для BFS для целых чисел, поэтому я немного запутался. Любая помощь будет принята с благодарностью.

struct vertex_node { 
      string name; 
      set <string> edges; 
}; 

void Graph::paths(string start, string end) 

{

bool visited[capacity]; 
    for(int i=0; i<capacity; i++){ 
     visited[i]=false; 
    } 

queue <string> q; 

int a = hash_string(start) % capacity; 
int b = hash_string(end) % capacity; 

visited[a]=true; 

q.push(start); 
visited[a]=true; 

while(!q.empty()){ 
    start = q.front(); 
    cout << start << " "; 
    q.pop(); 

    for(int i=0;i < courses->get_capacity(); i++){ 
     for(std:: set<string> :: iterator j = list[]->edges.begin(); 
     j !=list[i]->edges.end(); j++){ 
     if(!visited[*j]){ 
      visited[*j] = true; 
      q.push(*j); 
     } 
    } 
} 

}

+0

Ну, вы проверили свой код по строкам с помощью отладчика? –

ответ

0
 for(std:: set<string> :: iterator j = list[i]->edges.begin(); 
     j !=list[i]->edges.end(); j++){ 
     if(!visited[a]){ 
      visited[a] = true; 
      q.push(end); 
     } 
    } 

Здесь петельные через list[i] от итератора j, но вы никогда не заботился о j. Вы только подтвердили много раз, что start посещает (путем проверки !visited[a])

+0

Не могли бы вы изменить мой код, чтобы проиллюстрировать ошибку, которую вы нашли? Большое спасибо за вашу помощь timrau – Lionel