C++ 宽度优先搜索两个字符串

C++ 宽度优先搜索两个字符串,c++,string,breadth-first-search,C++,String,Breadth First Search,当给定两个字符串时,我尝试创建一个深度优先搜索算法。我已经建立了我的图表,但在广度优先搜索算法方面遇到了问题。我不确定我应该如何处理我从散列函数得到的int a和int b 上下文。。。。 顶点节点有一个名称(例如John)和一组字符串,这些字符串是John的朋友的其他名称的列表。在主要的ex.John和Mary中给了我两个名字,我想打印出连接这两个名字的路径。我只有整数的BFS代码,这就是为什么我有点困惑的原因。任何帮助都将不胜感激 struct vertex_node {

当给定两个字符串时,我尝试创建一个深度优先搜索算法。我已经建立了我的图表,但在广度优先搜索算法方面遇到了问题。我不确定我应该如何处理我从散列函数得到的int a和int b

上下文。。。。 顶点节点有一个名称(例如John)和一组字符串,这些字符串是John的朋友的其他名称的列表。在主要的ex.John和Mary中给了我两个名字,我想打印出连接这两个名字的路径。我只有整数的BFS代码,这就是为什么我有点困惑的原因。任何帮助都将不胜感激

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

 void Graph::paths(string start, string end)
struct vertex\u节点{
字符串名;
设置边缘;
};
void图形::路径(字符串开始、字符串结束)
{

bool访问[容量];
对于(int i=0;iedges.end();j++){
如果(!访问[*j]){
访问[*j]=真;
q、 推动(*j);
}
}
}
}
用于(std::set::iterator j=list[i]->edges.begin();
j!=列表[i]->edges.end();j++){
如果(!已访问[a]){
访问[a]=正确;
q、 推动(结束);
}
}

在这里,您通过迭代器
j
循环浏览
list[i]
,但您从未关心过
j
。您只确认了多次访问了
start
(通过选中
!visted[a]

那么,您是否使用调试器逐行检查了代码?您是否介意编辑我的代码以说明您发现的我的错误?非常感谢你的帮助timrau
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);
        }
    }
}
     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);
         }
     }