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